指向const int的指针的const指针转换为指向int的指针的const指针

时间:2015-06-24 14:49:57

标签: c++ pointers c++11 casting const

以下是代码:

int *const *a = nullptr;
int const *const *b = nullptr;

b = a;

为什么这段代码编译运行没有错误? const指针是不是意味着我们无法改变它?

2 个答案:

答案 0 :(得分:3)

实际上我的想法有误:我认为bconst,因此无法分配。但b是可修改的(虽然它指的是const),因此可以分配给b

换句话说,int const *const *b不是const指针,但实际上是指向const指针的指针,因此可以更改它。

答案 1 :(得分:0)

b是指向const int的const指针的指针。允许将其指定为指向(可写)int的const指针,因为如果要取消引用*b,那么您将能够通读它。

另一方面,a=b将无法编译,因为这会使指向(可写)的int指向const int,因此能够写入你不应该写的东西。类型系统会阻止这种情况。

当你考虑时,它会变得更有趣:

int const **c;
int **d;

练习:a,b,c& s之间允许哪些作业? d?为什么呢?