有没有办法检测可以标记为“constexpr”的函数?

usr*_*567 4 c++ constexpr

鉴于我想改进我的 C++ 代码库。第一步是将函数标记为constexpr满足所用 C++ 标准的要求。有没有办法判断一个函数是否可以被标记constexpr?

我想出的唯一方法是添加constexpr到单个实例,运行编译器,并检查它是否抱怨它不是constexpr。重复直到检查完所有实例。这种方法无法扩展。

相关:我们应该尽可能使用 constexpr 吗?

Art*_*yer 5

在 C++23 中,constexpr 函数恰好有两个要求:

  • 它不是一个协程;而是一个协程。
  • 如果它是构造函数或析构函数,则其类没有虚拟基类。

如果您的代码库中的每个函数都满足这一点,我不会感到惊讶。

因此您可以标记每个模板化函数和内联函数constexpr。因为constexpr函数是隐式的inline,所以不能对extern函数执行此操作。
这应该意味着头文件中的每个函数定义都可以是constexpr.

(如果您的 constexpr 函数出现编译器错误,且永远无法生成常量表达式,请升级您的编译器)