大佬教程收集整理的这篇文章主要介绍了c – 空指针常量初始化:哪种行为正确?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
int main() { const int x = 0; int* y = x; // line 3 int* z = x+x; // line 4 }
标准(C11§4.10/ 1)
有四种可能性:
>第4行正常,但第3行没有.这是因为x和x x都是常量表达式,其值为0,但只有x x是prvalue.似乎gcc采用了这种解释(live demo)
>第3行和第4行都可以.虽然x是左值,但是应用了左值到右值的转换,使得prvalue常量表达式等于0.我的系统上的clang(clang-3.0)接受第3行和第4行.
>第3行和第4行都不正常.两条线上的clang-3.4错误(live demo).
>第3行没问题,但第4行没有. (包括为了完整性,即使我尝试的编译器没有表现出这种行为.)
谁是对的?是否取决于我们正在考虑的标准版本?
以上是大佬教程为你收集整理的c – 空指针常量初始化:哪种行为正确?全部内容,希望文章能够帮你解决c – 空指针常量初始化:哪种行为正确?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。