当一个类满足以下条件时,他是一个聚合类
1.所有成员均为public:
2.无任何构造函数
3.没有类内初始化
4.没有基类与虚函数
支持列表初始化。
字面值常量类
在满足是聚合类的情况下
所有数据成员都是字面值
或者符合以下四种要求
1. 所有数据成员都是字面值
2.至少有一个constexpr构造函数
3.如果一个数据成员有类内初始化,其右值必须是常量表达式;
4.如果类成员中包含另一个类,另一个类必须使用自己的constexcp构造函数。
5.类必须使用析构函数的默认定义
尽管构造函数不能是const的,但是字面值常量类还是可以用constexpr构造函数的
contestexpr构造函数
有趣的是, contestexpr规定只能有一条返回语句,构造函数规定不能有返回语句,contestexpr构造函数,也是没有返沪语句,只能用列表初始化,花括号内空实现。
#include <iostream>
using namespace std;
class Debug
{
private:
bool hw;
bool IO;
bool other;
public:
constexpr bool good()
{
return hw&&IO&&other;
}
constexpr Debug(bool a,bool b, bool c) : hw(a), IO(b), other(c) {}
constexpr Debug(bool p = true) : hw(p), IO(p), other(p) {}
};
int main()
{
Debug debug;
cout.setf(ios_base::boolalpha);
cout << debug.good();