C++11 constexpr
在编译过程中就已经把值计算出来,会做类型检查; define 是在预编译过程中进行简单的文本替换,不会做类型检查; 在对象声明时或非静态成员函数中使用 constexpr 关键字(C++ 14)暗示这个对象或非静态成员函数是 const 的; 在函数或静态数据成员(C++ 17)声明中使用的 constexpr 关键字意味着内联; C++11 中 constexpr 函数可以使用递归,?: 三目运算符,从 C++14 开始,constexpr 函数可以在内部使用局部变量、循环和分支等简单语句; constexpr 修饰的是函数参数,而不是函数返回值,函数返回值是可以被改变的 constexpr 修饰变量必须满足以下要求: 它的类型必须是一个LiteralType 它必须立即初始化 其初始化的完整表达式,包括所有隐式转换、构造函数调用等,必须是 constexpr 它必须有 constexpr 析构 constexpr 修饰函数必须满足以下要求: 它不能是 virtual 修饰的(直到 C++20) 它不能是 coroutine 协程(直到 C++20) 它的返回类型(如果有的话)必须是 LiteralType 所有参数必须是 LiteralType class Test{ public: int x = 10; }; int main() { constexpr Test t; // const cout << typeid(t....