2014-10-14 3 views

ответ

5

Это означает, что это указатель const на переменную const.

Смотрите следующие примеры:

int x = 5;    // non-const int 
int* y = &x;    // non-const pointer to non-const int 

int const a = 3;   // const int 
int* const b = &a;  // const pointer to non-const int 
int const* const c = &a; // const pointer to const int 

Таким образом, вы можете видеть, что две вещи, которые имеют потенциал, чтобы быть изменчивым, переменная и указатель. Любой из этих двух может быть const.

А const переменная работает так же, как вы бы себе:

int foo = 10; 
foo += 5;  // Okay! 

int const bar = 5; 
bar += 3;  // Not okay! Should result in a compiler warning (at least) 

const указатель работает точно так же:

int foo = 10; 
int bar = 5; 

int* a = &foo; 
a = &bar; // Okay! 

int* const b = &foo; 
b = &bar; // Not okay! Should also result in a compiler warning. 
+0

Каково правило определения того, что означает 'const'? Например, это все, что находится слева от 'const'? – BWG

+0

@BWG См. [Этот пост] (https://stackoverflow.com/questions/7526152/easy-rule-to-read-complicated-const-declarations). В основном вы читаете справа налево, с несколькими исключениями. – CoryKramer

+0

@ Цибер, который кажется ужасно неинтуитивным, поскольку на английском языке дескрипторы предшествуют цели. Спасибо за ответ! – Benjin

0

Вы используете const указатель на переменную const, которые являются два разные вещи.

Разница в одном является указателем const, который по существу указывает на переменную const.

1

Прочтите справа Пусть F:

parameterNam является постоянным указателем типа STRUCT_THING оказавшегося быть константными.

В принципе вы не можете изменить его, и вы не можете изменить то, на что он указывает.

+0

Gotchya. Так что, если бы у меня был только один или другой «const», то либо указатель мог бы указывать на что-то другое, либо на то, что он не указывает на то, что он указывает на нечто изменяемое? – Benjin

+0

Это правильно. – ventsyv

Смежные вопросы