常量表达式
const是运行期常量, 效率较低
为了实现类型安全的define而提出的编译期常量, 在表达式面前加上constexpr来声明
编译器会在编译时期对constexpr进行值计算, 类似模板元编程...必须是个常量表达式
常量表达式的值必须在使用前初始化, 但是如果没有代码用到其地址, 编译器可以不生成数据, 直接将常量表达式作为编译时期的值使用
编译时浮点常量表达式的精度至少要等于/高于运行时浮点数常量的精度...注意此时类的构造函数函数体必须为空, 所有成员都只能依靠常量表达式在初始化列表中初始化
常量表达式不能用于virtual
常量表达式函数不需要重写非常量版本, 编译器会自动生成, 重写反而会报错
当模板函数声明为常量表达式后...nullptr用于模板时, 模板将其作为一种普通类型而非T*来推导
nullptr占用的内存与void*相同
C++11规定不能取nullptr的地址, 但还是可以用右值引用捕获nullptr然后取地址...上面32字节对齐的设定称为扩展对齐, 可能会引起错误, 要谨慎
std::align()可以动态根据指定的对齐方式调整数据块的位置从而提高访问效率
std::aligned_storage()可以在产生对象实例的时候对对齐方式做出一定保证