C++指向const对象的二级指针定义与类型匹配疑问
核心原因是你对int const*的类型解读出现了错误
C/C++的类型声明中,const的修饰规则为:默认修饰紧邻其左侧的类型符;如果const写在类型声明的最开头、左侧没有任何类型符,就修饰紧邻它右侧的类型符。
按照这个规则:
const int *和int const *是完全等价的类型,二者都表示「指向const int对象的指针」:指针本身的值可以修改,只是不允许通过这个指针修改指向的int对象的值- 你误以为的「指向int的const指针」(即指针本身是常量、不能修改指向,但可以修改指向的int对象的值)的写法是
int * const
对应你给出的代码:
int x=0; int const* y=&x; const int** z=&y;
这里y的类型就是标准的「指向const int对象的指针」,完全符合const int** z要求的指向对象类型,因此z=&y可以正常编译。
如果你把y的类型改成你误以为的「指向int的const指针」,代码就会直接报错:
int x=0; int *const y=&x; // 指向int的const指针 const int** z=&y; // 编译报错,类型不匹配
内容的提问来源于stack exchange,提问作者barbatos233
相关产品推荐
相关产品推荐

