Подтвердить что ты не робот

Const int = int const?

Например,

int const x = 3;

действительный код?

Если да, означает ли это то же самое, что и

const int x = 3;

?

4b9b3361

Ответ 1

Они оба действительны, и оба они эквивалентны. Для типа указателя, хотя они оба действительны, но не эквивалентны.

Объявляет 2 постоянных константы:

int const x1 = 3;
const int x2 = 3;

Объявляет указатель, данные которого не могут быть изменены с помощью указателя:

const int *p = &someInt;

Объявляет указатель, который не может быть изменен, чтобы указать на что-то еще:

int * const p = &someInt;

Ответ 2

Да, они одинаковы. Правило в C++ по сути состоит в том, что const применяется к типу слева от него. Однако есть исключение, что если вы поместите его в крайний левый угол объявления, оно будет применено к первой части типа.

Например, в int const * вас есть указатель на постоянное целое число. В int * const вас есть постоянный указатель на целое число. Вы можете экстраполировать это на указатель на указатели, и английский может запутаться, но принцип тот же.

Для другого обсуждения о преимуществах выполнения одного над другим, см. Мой вопрос по этому вопросу. Если вам интересно, почему большинство людей используют это исключение, эта запись часто задаваемых вопросов о Stroustrup может оказаться полезной.

Ответ 3

Да, это точно то же самое. Однако разница в указателях. Я имею в виду:

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;

Ответ 4

Из "Эффективного С++", пункт 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

Ответ 5

Это то же самое по смыслу и действительности.

Насколько я знаю, const только становится сложным всякий раз, когда он включает указатель.

int const * x;
int * const x; 

разные.

int const * x;
const int * x; 

совпадают.