C++ `constexpr` 的限制

  1. constexpr函数不能包含条件语句(if、switch)、循环(for、while)、异常处理(try、catch)等。

  2. constexpr函数不能进行动态内存分配。

  3. constexpr变量必须是编译时常量,即其值在程序运行期间不能被修改。

  4. constexpr变量不能是类的成员变量,因为类的成员变量可能不是编译时常量。

  5. constexpr变量不能是左值,因为左值在编译时无法确定其值。

  6. constexpr函数不能有副作用,即不能修改全局变量的值或调用非constexpr函数。

  7. constexpr函数和变量的返回类型只能是内置类型或枚举类型,不能是自定义类型或类类型。

  8. constexpr函数和变量的参数必须是编译时常量表达式或字面量。

  9. constexpr函数和变量的返回值必须是编译时常量表达式或字面量。

  10. constexpr函数和变量的定义必须在声明之前,且必须具有相同的类型和值。