需求
今天使用统一初始化, {}
初始化 struct
之后,发现数据还是 0,没有初始化进去。
解决
经过网上查找之后,找到问题所在,列表初始化只能用于 aggregate
, 而
class
, struct
, union
是否属于 aggregate
, 需要满足以下几个条件:
- 无自定义构造函数
- 无私有或受到保护的非静态数据成员
- 无基类
- 无虚函数
- 类的定义中,不能有被
{}
和=
直接初始化的非静态数据成员
// 自定义构造函数
struct Test {
int x;
int y;
Test(int, int) {}
};
// 保护非静态数据成员
struct Test {
int x;
int y;
protected:
int z;
};
// 基类
struct base{};
struct Test : base {
int x;
int y;
};
// 虚函数
struct Test {
int x;
int y;
virtual void func(int, int) {}
};
// 直接初始化
struct Test {
int x;
int y = 5;
};
所以只要注意以上几点即可,但是如果一定要这种情况下还要能使用列表进行初始化,也是可以的,需要如下定义:
struct Test {
int x;
int y = 5;
Test(int i, int j) : x(i), y(j) {}
};