C++11 为什么 cout 从 bool 数组打印大整数?

标签 c++ cout

#include <iostream>
using namespace std;

int main() {
    bool *a = new bool[10];

    cout << sizeof(bool) << endl;
    cout << sizeof(a[0]) << endl;

    for (int i = 0; i < 10; i++) {
        cout << a[i] << " ";
    }

    delete[] a;
}

以上代码输出:

1
1
112 104 151 0 0 0 0 0 88 1 

最后一行应该包含垃圾值,但为什么它们不全是 0 或 1?堆栈分配的数组也会发生同样的事情。

已解决:我忘记了 sizeof 计算的是字节,而不是我想的位。

最佳答案

您有一组默认初始化的 bool。基本类型的默认初始化不需要初始化,因此它们都具有不确定的值。

您可以通过提供一对括号将它们零初始化:

bool *a = new bool[10]();

bool 值是 1 字节整数类型,所以您看到此输出的原因可能是因为那是当时堆栈上可以用单个字节查看的数据。请注意它们是如何小于 255(可以从无符号 1 字节整数生成的最大数字)。

OTOH,打印出一个不确定的值是未定义的行为,所以在这个程序中真的没有逻辑需要考虑。

关于C++11 为什么 cout 从 bool 数组打印大整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809949/

相关文章:

c++ - 为什么在键检查 map::emplace 之前调用对象的构造函数

c++ - C++ Map 中结构键的比较运算符

c++ - CLion cout打开命令提示符窗口,而不使用CLion的终端

c++ - std::ostream 作为可选 (!) 函数参数

c++ - 关于成员函数指针值的 Constexpr - 未定义的行为?

C++ SVG库写入路径数据

c++ - 编程 : principles and practice in c++ - cout issue

c++ - 打印时间到 std::ostream

c++ - 为什么我的程序不打印完美整数?

c++ - stm32f4vg407的eCos配置工具