概括
在C++11中引入了 constexpr
关键字. 意思是常量表达式, 详细来说就是在编译期可求值的表达式. 可以修饰表达式, 函数, 构造函数, 类等… 可以让编译器做出尺度更大的优化.
常量表达式的概念
这个关键字是为了解决以前的 const
关键字带来的一些问题, 其实在代码实战中 const
显然是只有readonly只读这个概念, 其在很多场合上并不符合逻辑常量这个概念, 就比如说:
const int f(){
return 1;
}
int main(){
int arr[f()];
return 0;
}
// 会报错
上述这个代码, 我们会得到报错: 函数调用在常量表达式中必须具有常量值 和 表达式的计算结果不是常数 .
然而在逻辑上, 上面这个函数返回的明显是一个逻辑上的常量.
常量表达式函数
而在使用了constexpr
之后, 编译器就会大胆地对f()
进行优化, 比如说直接内联了它, 而不需要等到运行时候才去计算
constexpr