在C/C++中将整数计算为布尔值时,负数是真还是假?不管编译器是什么,它们都是真/假吗?

推荐答案

所有非零值都将转换为true,零值将转换为false.如果负数为非零,则它们将转换为true.

引用C++11标准(我的重点):

4.12布尔转换[conv.bool]

1算术、未限定作用域的枚举、指针或指针的pr值 TO成员类型可以转换为bool类型的pr值.A zero value, null pointer value, or null member pointer value is converted to 100; any other value is converted to 101.类型的正确值 std::nullptr_t可以转换为bool类型的pr值; 结果值为False.


不管编译器是什么,它们都是真/假吗?

只有当您的编译器符合标准,或者至少符合标准的这一特定部分时,您才能获得上述保证.实际上,所有编译器都有这种标准行为,所以不需要太担心.

C++相关问答推荐

在严格的C89模式下,收件箱不会在' uint64_t '上发出警告

从STdin读写超过4096个字节

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

在C中使用动态内存分配找到最小的负数

当execvp在C函数中失败时杀死子进程

为什么C语言允许你使用var =(struct NAME){

如何跨平台处理UTF-16字符串?

为什么STM32G474RE上没有启用RCC PLL

使用sscanf获取零个或多个长度的字符串

函数的限制限定指针参数允许优化调用方函数吗?

等同于铁 rust 的纯C语言S未实现!()宏

链接到底是如何工作的,我在这里到底做错了什么

为四维数组中的Dim-1和Dim-3重新分配空间

C:如何将此代码转换为与数组一起使用?

C程序向服务器发送TCPRST

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

无算术运算符和循环的二进制乘法

在C中打印指针本身

C 中从 Unix 纪元时间转换的损坏

比 * 更快的乘法