我们从 Stephen Prata 的书 - The C++ Programming Language(第 6 版)中得到以下声明。页 330:
你可以把const和非常量数据的地址都赋给一个指向常量的指针,假设数据本身不是指针,但是你只能把非常量数据的地址赋给一个非常量指针。
在我的理解中,有以下几点,与笔者第一部分的观点不谋而合:
const int a = 5;
int b = 6;
const int * ptr = &a; //Допустимая операция, невозможно изменить значение a через указатель и переменную a.
const int * ptr2 = &b; //Допустимая операция, невозможно изменить значение b через указатель, но возможно через переменную b.
但是,“但只允许将非常量数据的地址分配给非常量指针”的部分引起误解,按照作者的逻辑,以下行为是不可接受的:
int a = 5;
int * const ptr = &a; //Недопустимо, так как указатель константный, указывает на не константный тип.
然而,这段代码编译成功,这对我来说似乎很合乎逻辑,因为结果我们得到了一个指针,不可能改变地址,但没有什么能阻止通过指针 (*ptr) 改变变量的值。
其实问题是,作者想表达什么,我从他的陈述中误解了什么?