cpp11constexpr 函数和常量表达式
时间: 2023-06-01 18:02:59 浏览: 117
C++11 引入了 constexpr 关键字,用于指定函数或对象是常量表达式。常量表达式是在编译时就能计算出结果的表达式,它可以用于数组大小、模板参数等需要在编译时确定的地方。
constexpr 函数
constexpr 函数是指能在编译时求值的函数,它的返回值可以作为常量表达式使用。constexpr 函数的参数和返回值必须是字面类型。
例如,下面的函数就是一个 constexpr 函数:
```cpp
constexpr int square(int x) {
return x * x;
}
```
我们可以在编译时计算出 square(5) 的值,因此它是一个常量表达式。
constexpr 对象
constexpr 对象是指在编译时就能计算出值的对象。constexpr 对象必须被声明为 const,而且必须用常量表达式初始化。
例如,下面的语句定义了一个 constexpr 对象:
```cpp
constexpr int max_num = 100;
```
我们可以在编译时就知道 max_num 的值是 100,因此它是一个常量表达式。
constexpr 函数和常量表达式的限制
constexpr 函数和常量表达式有一些限制:
1. constexpr 函数必须有一个返回值,而且返回值必须是字面类型。
2. constexpr 函数的函数体必须足够简单,能在编译时被求值。
3. constexpr 函数不能包含任何副作用,比如修改全局变量或调用非 constexpr 函数。
4. constexpr 函数的参数和返回值必须是字面类型。
5. constexpr 对象必须被声明为 const,而且必须用常量表达式初始化。
6. constexpr 对象的类型必须是字面类型。
总结
constexpr 关键字用于指定函数或对象是常量表达式。constexpr 函数和常量表达式必须在编译时就能计算出值,它们有一些限制。constexpr 函数和常量表达式可以用于数组大小、模板参数等需要在编译时确定的地方。
阅读全文