第7.1章: constexpr 函数
概述
constexpr 函数是可以在编译期求值的函数。本章只关注
如何正确定义这样一个函数,以及它的定义需要遵守哪些规则。
constexpr 函数同时也隐式是 inline。
这让你可以把它定义在头文件中,而不会在各翻译单元之间造成
重复符号错误。
定义 constexpr 函数
要定义 constexpr 函数,请把关键字
constexpr 放在返回类型之前:
constexpr int add(int a, int b)
{
return a + b;
}
constexpr 函数必须遵守常量表达式的规则。实践中,
这意味着:
- 函数必须返回一个值
- 它不能执行 I/O
- 它不能修改全局变量
由于 constexpr 意味着 inline,在头文件中定义这类
函数是安全的,也不会出现重复定义错误。
示例
constexpr int square(int x)
{
return x * x;
}
这个函数在常量表达式中是有效的,放在头文件中也是安全的。
要点
constexpr定义一个可以在编译期运行的函数。constexpr函数隐式是inline。- 它们必须遵守常量表达式的规则。
- 在头文件中定义它们是安全的。