c++的constexpr
时间: 2023-10-13 18:29:06 浏览: 72
`constexpr` 是 C++11 引入的关键字,用于指定可以在编译时求值的表达式。在 C++11 之前,只有常量表达式才能在编译时求值,而 `constexpr` 可以使更多的表达式在编译时求值,以提高程序的性能。
`constexpr` 可以用于函数、变量和构造函数。对于函数和构造函数,它们必须是“常量表达式函数”,即函数体内只能包含单一的 return 语句,且 return 语句中的表达式必须是常量表达式。对于变量,它必须是一个常量表达式。
示例代码:
```c++
constexpr int factorial(int n) {
return (n <= 1) ? 1 : n * factorial(n - 1);
}
int main() {
constexpr int x = factorial(5); // 编译时求值,x = 120
static_assert(x == 120, "factorial(5) should be 120");
return 0;
}
```
在上面的示例中,`factorial` 函数是一个常量表达式函数,因为它的函数体内只包含单一的 return 语句,且 return 语句中的表达式 `n <= 1 ? 1 : n * factorial(n - 1)` 是一个常量表达式。因此,可以在编译时求出 `factorial(5)` 的值,并将其赋给 `constexpr` 变量 `x`。由于 `x` 是一个常量表达式,因此可以在 `static_assert` 语句中使用它进行编译时断言。
阅读全文