C++ 将 bool 转换为 int - 标准

Daw*_*dPi 1 c++ casting boolean

我感兴趣的是,标准是否会bool在将类型转换为integer类型后对类型类型的可能值进行说明。

例如下面的代码:

#include <iostream>
using namespace std;

int main() {
    bool someValue=false;
    *((int*)(&someValue)) = 50;

    cout << someValue << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印 1,即使它被迫存储值 50。标准是否指定了任何相关内容?或者编译器是否为 bool 类型生成某种方法,如下所示:

operator int(){
    return myValue !=0 ? 1 : 0;
}
Run Code Online (Sandbox Code Playgroud)

另外为什么铸造如下:

reinterpret_cast<int>(someValue) = 50;
Run Code Online (Sandbox Code Playgroud)

因错误而被禁止

错误:从类型“bool”到类型“int”的转换无效

(对于以上所有内容,我使用 GCC 5.1 编译器。)

Xar*_*arn 7

您使用它的方式表现出了 UB,因为您在 bool 变量的边界之外编写并且违反了严格的别名规则。

但是,如果您有一个 bool 并希望将其用作 int (这通常发生在您想要基于某些条件对数组进行索引时),则标准要求 bool 转换true1falsebool 转换为0,无论什么(UB显然被排除在外)。

例如,保证输出52只要should_add == true

int main(){
    int arr[] = {0, 10};
    bool should_add = 123;
    int result = 42 + arr[should_add];
    std::cout << result << '\n';
}
Run Code Online (Sandbox Code Playgroud)