C++11的时候:
函数体只能有单一的return语句(或者额外的不影响数据的编译期语句)
函数必须返回值, 因为一定要从常量表达式中获得常量
函数使用前(编译期)一定要有定义
返回语句中不能有非常量的函数或数据...必须是个常量表达式
常量表达式的值必须在使用前初始化, 但是如果没有代码用到其地址, 编译器可以不生成数据, 直接将常量表达式作为编译时期的值使用
编译时浮点常量表达式的精度至少要等于/高于运行时浮点数常量的精度...注意此时类的构造函数函数体必须为空, 所有成员都只能依靠常量表达式在初始化列表中初始化
常量表达式不能用于virtual
常量表达式函数不需要重写非常量版本, 编译器会自动生成, 重写反而会报错
当模板函数声明为常量表达式后..., 但总是定义了从std::atomic到T的转换方便使用
各种不同的原子类型定义了不同的操作, 其中绝大多数原子类型都支持load(), store()和exchange()三大成员函数, 这三种操作在其赋值操作符中广泛使用...对齐值越大我们称对齐要求越高
C++还规定了"基本对齐值"alignof(std::max_align_t), 每个平台各自设定, 一般是16字节.