假设我有一个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初始化它)或者是尚未创建的对象,留下一个" junk"对象,直到我自己初始化索引?
我知道如果它是一个原始数据类型的数组,它们是默认初始化的(如果我有一个int数组,它们都将为0)。但是,我不知道这种行为是否适用于像我的结构这样的更复杂的对象。
答案 0 :(得分:4)
类和结构在c++中是等效的,它只是默认的访问说明符不同。请检查Arrays and Classes,其中包含:
普通数组声明样式使用数组中每个对象的默认构造函数(如果该类具有默认构造函数)
从实际的角度来看,在你的结构中这样做:
Pair() : x(2), y(4) { std::cout << "Called\n"; }
您将看到信息被打印16次。
这是一种常用方法(将构造函数中的打印消息添加到析构函数中),当您想知道所调用的内容时(通常是它们的顺序)。
提示:使用初始化列表,而不是在构造函数体内分配值。