C ++ bool to int cast和GCC 4.8.1

时间:2013-06-13 23:02:35

标签: c++ gcc type-conversion

我是否理解boolint演员应该true投放到1

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;
}

这是我得到的:

>> g++ -std=c++11 test_bool.cpp  -pedantic -O3
>> ./a.out 
136
251
160

3 个答案:

答案 0 :(得分:7)

  

我是否理解boolint演员应该true投放到1

  

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

这是因为您的程序有未定义的行为,因为您的数组未初始化。例如,试试这个:

array<bool, 3> bb = { true, false, true };

你会看到一致的输出。这是live example

答案 1 :(得分:1)

您的bb数组未初始化,因此您的代码为undefined behavior。您可以看到This Demo输出不同的结果。

答案 2 :(得分:1)

数组的值尚未初始化,因此使用垃圾初始化单元格。