许多编译器似乎只在bool值中保留0或1,但我不确定这是否总是有效:

int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?

推荐答案

对:

在C++中(§4.5/4):

bool类型的右值可以是 转换为INT类型的右值, 假变成零,真变成真 成为其中一员.

在C中,当值转换为_Bool时,它将变为0或1(§6.3.1.2/1):

当任何标量值转换为

当转换到int,这是非常直接的.int可以容纳0和1,因此值没有变化(§6.3.1.3).

C++相关问答推荐

当我try 计算一个多项时,看到segfault.我做错了什么?

如何启用ss(另一个调查套接字的实用程序)来查看Linux主机上加入的多播组IP地址?

在编译时参数化类型定义

如何将长字符串转换为较小的缩写,该缩写由第一个字符、最后一个字符和中间的字符数组成?

如何在C中使printf不刷新标准输出?

在C++中访问双指针

一旦运行长度超过2,编译器是否会优化";strnlen(mystring,32)>;2";以停止循环?

GTK函数调用将完全不相关的char* 值搞乱

将多项式从文件.txt加载到终端时出现问题

从不兼容的指针类型返回&&警告,但我看不出原因

为什么Linux无法映射这个PT_LOAD ELF段?

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

如何摆脱-WIMPLICIT-Function-声明

在C中使用无符号整数模拟有符号整数

当用C打印过多的';\n';时输出不正确

共享内存未授予父进程权限

无法理解 fgets 输出

如何用用户输入的多个字符串填充数组?

clion.我无法理解 Clion 中发生的 scanf 错误

在 C/C++ 中原子按位与字节的最佳方法?