C++ bool to int cast和GCC 4.8.1

use*_*436 2 c++ gcc type-conversion

我是否正确地理解boolint投应该投true1

GCC 4.8.1为此代码提供了奇怪的结果:

#include <array>
#include <iostream>

int main()
{
    using namespace std;

    array<bool, 3> bb;
    for ( int i = 0; i < 3; i++ ) cout << static_cast<int>( bb[i] ) << endl;

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

这是我得到的:

>> g++ -std=c++11 test_bool.cpp  -pedantic -O3
>> ./a.out 
136
251
160
Run Code Online (Sandbox Code Playgroud)

And*_*owl 7

我是否正确地理解boolint投应该投true1

是.

GCC 4.8.1为此代码提供了奇怪的结果:

那是因为你的程序有未定义的行为,因为你的数组没有被初始化.例如,试试这个:

array<bool, 3> bb = { true, false, true };
Run Code Online (Sandbox Code Playgroud)

你会看到一致的输出.这是一个实例.

  • @ user2052436:`bool`是一个标量类型,因此在默认初始化之后它的值是不确定的(这是一个非初始化).每次尝试读取具有不确定值的对象的值都会导致未定义的行为 (3认同)