为什么我会从int **到const int **无效转换?

时间:2019-01-27 10:13:31

标签: c++

正如我已经了解了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

请帮助我了解为什么允许/不允许。我不想弄乱指针,只是想知道事情如何/不能工作。

0 个答案:

没有答案