возможная несогласованность в постоянных значениях?

В приведенном ниже коде p константа как указателя, так и значения, но b может изменить значение *p. Это не интуитивно. Должен ли компилятор выдавать предупреждение хотя бы?

int b{3}
const int* const p{&b}
//*p = 5;  // correctly produces error
b = 5;     // constant value is changed
cout << *p << endl; // shows 5. 
-3
15 февр. '15 в 14:29
источник поделиться
1 ответ

b не объявляется const поэтому вы можете изменить его все, что хотите.

Просто потому, что вы указали, что const указатель на const int не означает, что сам int фактически должен быть объявлен const.

Например, рассмотрим этот пример.

int foo(int const& x)    // In the context of this function x is const
{
    return x + 5;
}

затем

int a = 3;        // Note, this is not const
int b = foo(a);
a += 6;           // This is fine!

В приведенном выше примере a не является const а передается в функцию как const&. Так что пока вы не пытаетесь изменить x внутри foo вы не сделали ничего плохого. Но вы можете изменить a спину вне foo.

+3
15 февр. '15 в 14:30
источник

Посмотрите другие вопросы по меткам или Задайте вопрос