#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/