Cpp学习15 第 F 章 Constexpr 函数
Constexpr 函数
constexpr 函数是指允许在常量表达式中调用的函数。
Constexpr 函数可以在编译时求值,也可以在运行时求值。
务必在需要常量表达式的上下文中测试 constexpr 函数,因为 constexpr 函数在运行时求值时可能有效,但在编译时求值时可能失败。
Constextpr 函数是隐式内联的。
在单个源文件(.cpp)中使用的 constexpr/consteval 函数应该在使用该函数的源文件中定义。
在多个源文件中使用的 constexpr/consteval 函数应该在头文件中定义,以便可以将其包含到每个源文件中。
探究 constexpr 函数是如何被需要或可能被进一步评估的,略。
强制 constexpr 函数在编译时求值
使用返回值初始化一个 constexpr 变量(这就是为什么我们在之前的示例中一直使用变量 ‘g’)。然而,这需要为了确保编译时求值而在程序中引入一个新变量,这既不美观,又会降低代码的可读性。
Consteval C++20
C++20 引入了关键字 consteval ,用于指示函数_必须_在编译时求值,否则会导致编译错误。这类函数称为立即函数 。
如果某个函数由于某种原因必须在编译时进行求值(例如,因为它执行某些只能在编译时执行的操作),则可以使用 consteval 。consteval 函数 无法在运行时求值。
使用 consteval 使 constexpr 在编译时执行,略。
consteval 函数的参数总是显式地求值,所以如果我们将一个 constexpr 函数作为参数传递给 consteval 函数,那么这个 constexpr 函数必须在编译时求值!然后 consteval 函数会将 constexpr 函数的结果作为自身的返回值返回,以便调用者可以使用它。
constexpr/consteval 函数可以使用非常量局部变量
当 constexpr(或 consteval)函数在编译时求值时,它调用的任何其他函数都必须在编译时求值。
除非有特殊原因不这样做,否则可以作为常量表达式一部分求值的函数应该设为 constexpr (即使它目前没有以这种方式使用)。
不能作为必需常量表达式的一部分进行求值的函数不应标记为 constexpr 。
const, 常量,不一定编译时求值,可将不变量设置为const;
constexpr,常量且编译时求值,编译时能确定的值设置为constexpr。
- 标题: Cpp学习15 第 F 章 Constexpr 函数
- 作者: 铁名_IronName
- 创建于 : 2026-08-10 13:07:23
- 更新于 : 2026-08-10 20:22:56
- 链接: https://blog.ironname.top/2026/Cpp/Cpp学习15/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。