编译器是否同样处理int和bool类型?

ret*_*n 0 2 c++ types

如果我有以下代码:

int a = 1;
bool b = 1;
Run Code Online (Sandbox Code Playgroud)

a等于b吗?即使程序可能会返回它们是相同的,它们在低级别的所有方面实际上是否相等?

另外,如果我使用代码(伪),例如:

if (a)
then execute();
Run Code Online (Sandbox Code Playgroud)

execute()跑吗?我在寻求理论上的答案,我不能用实验来说服自己,因为这不是自然科学.谢谢你们.

R. *_*des 9

我认为你可以用正确的实验说服自己:

#include <type_traits>

int main() {
    int a = 1;
    bool b = 1;
    static_assert(! std::is_same<decltype(a), decltype(b)>::value,
                  "No, they are not the same on all aspects");
}
Run Code Online (Sandbox Code Playgroud)

也许两者之间最重要的区别是,bool只能有两个值:true而且false,虽然int可以有更多.这是另一个显示其结果的实验:

#include <cassert>

int main() {
    int a = 2;
    bool b = 2;
    assert(a != b);
}
Run Code Online (Sandbox Code Playgroud)

这两种类型可能看起来相似,因为两者之间存在隐式转换.任何为零的整数表达式都可以隐式转换为false,并且任何非零的整数表达式都可以隐式转换为true.在相反的方向,false可以隐式转换为零,并true转换为一个.如果2!= 1,这导致上面的代码结束测试.

现在关于是否execute();从问题的片段中调用的问题的答案应该是显而易见的:值aboolif语句中转换为a ,并且因为它不为零,它将转换为true并导致调用execute().


jxh*_*jxh 5

true在布尔上下文中使用时,非零数字或指针表达式将进行求值.同样,零表达式将评估为false.但是,a int和a bool是不同的类型,所以它们不一样.