对象成员数组C++默认初始化
Default initialization of C++ member array of objects?
假设我有一个C++类,如下所示:
class Foo{
public:
struct Pair{
int x;
int y;
Pair(){ x = 2; y = 4; }
};
private:
Pair pairArr[16];
}
如果不以其他方式初始化 pairArr,其中的 Pair 结构的默认值是多少?C++调用构造函数(用 x=2、y=4 初始化它(还是尚未创建对象,在我自己初始化索引之前留下一个"垃圾"对象数组?
我知道如果它是一个原始数据类型的数组,它们是默认初始化的(如果我有一个整数数组,它们都是 0(。但是,我不知道这种行为是否适用于更复杂的对象,例如我这里的结构。
类
和结构在 c++ 中是等效的,只是默认访问说明符不同。所以检查数组和类,它说:
普通数组声明样式对数组中的每个对象使用默认构造函数(如果类具有默认构造函数(
从实际的角度来看,在您的结构中执行此操作:
Pair() : x(2), y(4) { std::cout << "Calledn"; }
您将看到该消息被打印 16 次。
当您想知道所谓的内容(通常是它们的顺序(时,这是一种常用的方法(将打印消息添加到构造函数到析构函数(。
提示: 使用初始值设定项列表,而不是在构造函数主体内赋值。
相关文章:
- 使用 std::分配器在 constexpr 中进行默认初始化
- 为什么对象默认初始化,但基元不在C++?
- 为什么std::atomic的默认构造函数不默认初始化底层存储值
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 默认初始化无法正常工作
- C++11默认初始化/值初始化/直接初始化
- make_shared是否对每个成员变量执行默认初始化(零初始化)
- 是否可以默认初始化具有已删除默认构造函数的类类型
- 对象成员数组C++默认初始化
- POD成员默认初始化无括号
- 如何在不使用 new 的情况下进行默认初始化
- 有没有办法欺骗 std::make_shared 使用默认初始化
- 枚举类默认初始化
- 是默认的构造函数和默认初始化
- 为什么在C 中不允许使用括号的默认初始化
- 默认初始化的含义在C 11中发生了变化
- Main()函数中的默认初始化
- WINHTTP_CURRENT_USER_IE_PROXY_CONFIG默认初始化
- 强制本地变量默认初始化
- 默认初始化混乱