[英]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
是一个布尔文字,因此它属于常量表达式的类别,因此它可以限定为空指针常量。
false
和true
是0
和1
快捷方式。 对于指针,使用NULL
define NULL 0
。 所以它正确的语法。
编译器允许它,因为在C ++中false
与0
和NULL
相同。
就个人而言,至少对于作业,我发现使用NULL
来表示空指针更容易理解和更正确。
顺便说一句,在C ++之前,在某些系统上, NULL
实际上是一个定义为(void*)0xffff
的宏; 在这个答案中可以找到一些背景知识。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.