指向非const数据的指针可以隐式转换为指向相同类型的const数据的指针:
int *x = NULL;
int const *y = x;
添加额外的const限定符以匹配额外的间接寻址应该在逻辑上以相同的方式工作:
int * *x = NULL;
int *const *y = x; /* okay */
int const *const *z = y; /* warning */
-Wall
但是,使用标志对GCC或Clang进行编译会产生以下警告:
test.c:4:23: warning: initializing 'int const *const *' with an expression of type
'int *const *' discards qualifiers in nested pointer types
int const *const *z = y; /* warning */
^ ~
为什么添加额外的const
限定符“在嵌套指针类型中丢弃限定符”?
发布于 2019-03-26 09:44:09
由其他答案链接的FAQ条目解释了为什么不允许以下代码:
int **x = whatever;
const int **z = x;
但是,您的代码const int *const *z = x;
完全不同,并且它不会受到FAQ提出的相同缺陷的影响。
实际上,后一代码在概念上没有任何问题。它只是C规范中的一个缺陷,它是不允许的,它迫使C程序员在其代码中包含丑陋的强制转换。
C可以使用与C ++相同的规则; 但是C标准委员会并未决定这样做。
https://stackoverflow.com/questions/-100006508
复制相似问题