从我的编译器行为的角度来看,我发现很奇怪,它允许将布尔值分配给* char
.
char * k= false;
为什么?但是赋值后 * char 仍然没有初始化。为什么编译器不允许赋值int
?
从我的编译器行为的角度来看,我发现很奇怪,它允许将布尔值分配给* char
.
char * k= false;
为什么?但是赋值后 * char 仍然没有初始化。为什么编译器不允许赋值int
?
它将隐式地将布尔值转换为false
值为 0 的整数,并因此声明一个 NULL 指针。它实际上与
char* k = 0;
这是有效的语法
C++03 标准,#4.10:
空指针常量是整数类型的整数常量表达式 (5.19) 右值,其计算结果为零。
5.19:
一个整型常量表达式只能包含字面量 (2.13)、枚举数、常量变量或整型或枚举类型的静态数据成员,这些类型使用常量表达式 (8.5)、整型或枚举类型的非类型模板参数,以及 sizeof 表达式.
false
是一个布尔字面量,因此它属于常量表达式的范畴,所以它可以作为一个空指针常量。
false
和是和true
的快捷方式。对于指针,您使用which 。所以它正确的语法。0
1
NULL
define NULL 0
编译器允许这样做,因为在 C++中与和false
相同。0
NULL
就个人而言,至少对于分配,我发现使用它NULL
来指示空指针更容易理解和更正确。
顺便说一句,在 C++ 之前,在某些系统NULL
上实际上是一个宏定义为(void*)0xffff
; 在这个答案中可以找到一些背景。