正如我已经了解了C ++中的指针一样,我可以使用非常量对象初始化指向const
的指针,因为该指针仅用于读取例如:
int x{10};
const int* p{ &x }; // ok. p can change addr but not the value inside it.
但是不允许相反:我们无法使用const对象初始化指向非const的指针,因为如果允许,则将违反constness规则,例如:
const double Pi{ 3.14};
double* pPi{ &Pi }; // not allowed.
直到现在,我仍然很清楚。但是,当涉及到具有constness的多级间接访问时,对我来说事情就变得复杂了。例如:
int x{ 57 };
int* p{ &x };
const int** pp{ &p }; // why this not allowed?
如您在上面看到的,我得到了编译时错误:
从'int **'到'const int **'的无效转换
但是,如果我这样做:
int x{ 57 };
int* p{ &x };
const int* const* pp{ &p }; // ok
或者这也可行:
int x{ 57 };
const int* p{ &x };
const int** pp{ &p }; // ok
请帮助我了解为什么允许/不允许。我不想弄乱指针,只是想知道事情如何/不能工作。