如何测试/验证零初始化是否发生
How to test/verify that zero-initialization takes place
我正在尝试使用g++选项-std=c++98、-std=c++03、-std=c++11 在虚拟机上测试零初始化
不幸的是,没有那么多垃圾值,我看到了不应该有的零
如何强制一些随机值,以便我可以测试它?
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
int a;
};
class B
{
public:
B(){}
int x;
};
int main()
{
{
int tab[50000] = {0};
}
A a;
A* aa = new A;
B b;
B* bb = new B;
cout << a.a << endl;
cout << aa->a << endl;
cout << b.x << endl;
cout << bb->x << endl;
return 0;
}
不能保证看到随机数。C/C++标准只是说未初始化的值是未定义的,你不能说这些值有哪些。零是可以的(可能病毒机器在分配之前将所有内存清零)。
如果您确实需要随机数,请使用<random>
生成它们
相关文章:
- 列表初始化是否将原子初始化为零
- 使用函数声明进行函数指针初始化 - 是否可能
- 值初始化是否适用于原子对象?
- 聚合的值初始化是否使用其成员的默认初始值设定项?
- C 11联合会的空列表初始化 - 是否保证可以初始化工会的全长
- 找出静态初始化是否结束
- 非本地非内联变量的初始化:是否严格在"main()"函数调用之前进行
- 空字符数组的初始化是否有效
- 变量零初始化-是否有未定义的行为
- 0-原子的初始化是否保证将值成员设置为0
- POD 类对象初始化是否需要构造函数
- 在C++中使用类似 c 的初始化或构造函数初始化是否被认为更好
- 类内成员初始化是否删除赋值运算符
- C++11;非静态数据成员初始化是否可以访问其他数据成员
- 列表初始化是否为隐式转换
- 复制列表初始化是否在概念上调用复制 ctor
- 如何测试/验证零初始化是否发生
- C++默认初始化是否保留先前的零初始化
- 使用新结构体进行聚合初始化是否有效
- 检测CRT初始化是否在注入过程中完成