Например,
int const x = 3;
действительный код?
Если да, означает ли это то же самое, что и
const int x = 3;
?
Например,
int const x = 3;
действительный код?
Если да, означает ли это то же самое, что и
const int x = 3;
?
Они оба действительны, и оба они эквивалентны. Для типа указателя, хотя они оба действительны, но не эквивалентны.
Объявляет 2 постоянных константы:
int const x1 = 3;
const int x2 = 3;
Объявляет указатель, данные которого не могут быть изменены с помощью указателя:
const int *p = &someInt;
Объявляет указатель, который не может быть изменен, чтобы указать на что-то еще:
int * const p = &someInt;
Да, они одинаковы. Правило в C++ по сути состоит в том, что const
применяется к типу слева от него. Однако есть исключение, что если вы поместите его в крайний левый угол объявления, оно будет применено к первой части типа.
Например, в int const *
вас есть указатель на постоянное целое число. В int * const
вас есть постоянный указатель на целое число. Вы можете экстраполировать это на указатель на указатели, и английский может запутаться, но принцип тот же.
Для другого обсуждения о преимуществах выполнения одного над другим, см. Мой вопрос по этому вопросу. Если вам интересно, почему большинство людей используют это исключение, эта запись часто задаваемых вопросов о Stroustrup может оказаться полезной.
Да, это точно то же самое. Однако разница в указателях. Я имею в виду:
int a;
// these two are the same: pointed value mustn't be changed
// i.e. pointer to const value
const int * p1 = &a;
int const * p2 = &a;
// something else -- pointed value may be modified, but pointer cannot point
// anywhere else i.e. const pointer to value
int * const p3 = &a;
// ...and combination of the two above
// i.e. const pointer to const value
const int * const p4 = &a;
Из "Эффективного С++", пункт 21
char *p = "data"; //non-const pointer, non-const data
const char *p = "data"; //non-const pointer, const data
char * const p = "data"; //const pointer, non-const data
const char * const p = "data"; //const pointer, const data
Это то же самое по смыслу и действительности.
Насколько я знаю, const только становится сложным всякий раз, когда он включает указатель.
int const * x;
int * const x;
разные.
int const * x;
const int * x;
совпадают.