C中的双指针常量正确性警告指向非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限定符“在嵌套指针类型中丢弃限定符”?
2 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
之所以const
只能添加一个级别的原因是微妙的,并且在comp.lang.c FAQ中由问题11.10解释。
简而言之,请考虑与您的密切相关的此示例:
const int i;int *p;int const **z = &p;*z = &i;/* Now p points to i */
C通过仅允许在第一个指向级别丢弃限定符来避免此问题(因此z
不允许在此处进行赋值)。
您的确切示例不会遇到此问题,因为const
第二级意味着*z
无论如何都不会允许分配。在这种情况下,C ++ 会允许它,但C的更简单的规则不区分你的情况和上面的例子。
- 2 回答
- 0 关注
- 492 浏览
添加回答
举报
0/150
提交
取消