繁体   English   中英

编译器允许'char * k = false'?为什么?

[英]compiler allows 'char * k= false'? Why?

我从我的角度看编译器行为发现很奇怪,它允许将布尔值赋给* char

char * k= false;

为什么? 但是在赋值后,char仍未初始化。 为什么编译器不允许赋值int值?

它将隐式地将布尔值false转换为值为零的整数,并因此声明NULL指针。 它实际上没有什么不同

char* k = 0;

这是有效的语法

C ++ 03标准,#4.10:

空指针常量是整数类型的整数常量表达式(5.19)rvalue,其值为零。

5.19:

一个整数常量表达式只能包含文字(2.13),枚举数,常量变量或用常量表达式(8.5)初始化的整数或枚举类型的静态数据成员,整数或枚举类型的非类型模板参数,以及sizeof表达式。

false是一个布尔文字,因此它属于常量表达式的类别,因此它可以限定为空指针常量。

falsetrue01快捷方式。 对于指针,使用NULL define NULL 0 所以它正确的语法。

编译器允许它,因为在C ++中false0NULL相同。

就个人而言,至少对于作业,我发现使用NULL来表示空指针更容易理解和更正确。

顺便说一句,在C ++之前,在某些系统上, NULL实际上是一个定义为(void*)0xffff的宏; 这个答案中可以找到一些背景知识。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM