4

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

char * k= false;

为什么?但是赋值后 * char 仍然没有初始化。为什么编译器不允许赋值int

4

4 回答 4

5

它将隐式地将布尔值转换为false值为 0 的整数,并因此声明一个 NULL 指针。它实际上与

char* k = 0;

这是有效的语法

于 2012-10-24T08:19:32.413 回答
2

C++03 标准,#4.10:

空指针常量是整数类型的整数常量表达式 (5.19) 右值,其计算结果为零。

5.19:

一个整型常量表达式只能包含字面量 (2.13)、枚举数、常量变量或整型或枚举类型的静态数据成员,这些类型使用常量表达式 (8.5)、整型或枚举类型的非类型模板参数,以及 sizeof 表达式.

false是一个布尔字面量,因此它属于常量表达式的范畴,所以它可以作为一个空指针常量。

于 2012-10-24T08:53:13.093 回答
0

false和是和true的快捷方式。对于指针,您使用which 。所以它正确的语法。01NULLdefine NULL 0

于 2012-10-24T08:23:19.163 回答
0

编译器允许这样做,因为在 C++中与和false相同。0NULL

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

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

于 2012-10-24T08:33:29.850 回答