В настоящее время я пытаюсь изучить некоторые C++ и наткнулся на следующее неинтуитивное поведение. Поскольку t
является указателем на const int
, я бы ожидал, что *t
останется таким же, если мы не изменим t
.Почему постоянный целочисленный указатель указывает на недопустимое целое число?
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a = 3;
const int* t = &a; //Why is this allowed? a is NOT const int
a = 4;
cout << *t << endl; //This does then print 4
//*t = 4; //Throws error.
return 0;
}
Может кто-нибудь объяснить, почему это происходит?
, чтобы устранить путаницу, которую я предлагаю начать без указателей. 'int a = 1; const int b = a; 'просто отлично, а теперь' b' является const, а 'a' - нет, даже если удержание того же значения – user463035818
@ tobi303 Да, но в вашем примере' b' получает * копию * значение 'a'. – flawr
ну, тогда как насчет 'int a = 1; const int & b = a; 'now' b' является ссылкой для 'b', но вы не можете изменить значение через' b', даже если 'a' не const const – user463035818