条件赋值为布尔值

use*_*733 5 c c++

在C中模拟布尔值可以这样做:

int success;
success = (errors == 0 && count > 0);
if(success)
   ...
Run Code Online (Sandbox Code Playgroud)

随着stdbool.h包括以下可以做:

bool success;
success = (errors == 0 && count > 0) ? true : false;
if(success)
   ...
Run Code Online (Sandbox Code Playgroud)

根据我的理解,逻辑和比较运算符应返回1或0.此外,stdbool.h应定义常量以便true == 1false == 0.

因此,以下应该工作:

bool success;
success = (errors == 0 && count > 0);
if(success)
   ...
Run Code Online (Sandbox Code Playgroud)

它确实适用于我测试过的编译器.但是假设它是可移植代码是否安全?(假设stdbool.h存在)

因为bool是内部类型,C++编译器的情况是否不同?

dre*_*lax 14

可以安全地假设.在C99中,转换为_Bool类型后,所有非零值都将转换为1.这将在C99​​标准的6.3.1.2节中描述.相等和关系运算符(例如==,>=等)也保证导致1或0.这将在6.5.8和6.5.9节中描述.

对于C++,bool类型是一个真正的布尔类型,其中值被转换为true或者false不是1或0,但是将==操作的结果等分配给a bool并期望它可以工作仍然是安全的,因为关系和比较运算符bool反正导致了.当true转换为整数类型时,它将转换为1.