const int = int const? - PullRequest
       10

const int = int const?

56 голосов
/ 14 июля 2010

Например, является ли

int const x = 3;

допустимым кодом?

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

const int x = 3;

?

Ответы [ 5 ]

100 голосов
/ 14 июля 2010

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

Объявляет 2 числа, которые являются постоянными:

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

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

const int *p = &someInt;

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

int * const p = &someInt;
31 голосов
/ 14 июля 2010

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

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

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

17 голосов
/ 14 июля 2010

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

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;
8 голосов
/ 18 марта 2011

Из "Эффективного C ++" Item 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
3 голосов
/ 14 июля 2010

Это то же самое в значении и действительности.

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

int const * x;
int * const x; 

разные.

int const * x;
const int * x; 

одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...