C++ constexpr关键字

354 阅读1分钟

constexpr是c++11引入的一个关键字,用于声明能够在编译期间计算结果的常量表达式。
常量表达式:
在编译期间就能被完全计算出结果的值,这意味着其值是固定的,不变的,并且在程序运行时就已经确定了 ``` //不是常量表达式,因为他的赋值操作是在运行期间执行而不是编译期间执行 unsigned cnt = 42; string a[cnt];//C++ Primer上说错误,然而c++11编译通过了 //可以用关键字constexpr来声明这个表达式,这样他就是常量表达式 const unsigned cnt = 42;


使用constexpr声明的变量或函数必须满足以下要求:  
1. 必须是编译期可计算的表达式
2. 必须返回一个常量表达式的结果
3. 必须通过构造函数初始化

使用constexpr声明函数时,函数必须被定义为内联函数。这因为在编译期间的常量表达式需要被
直接展开,而内联函数可以保证其函数体在编译期间被展开。
例如,下面是一个使用constexpr声明的计算阶乘函数:
```c++
constexpr int factorial(int n)
{
    return (n<=1)?1:(n*factorial(n-1))
}