在C++11中,只有在特定情况下才能将函数声明为constexpr以求得编译时常量表达式的优化。编译器不能自动将非常量函数转换为constexpr函数。 但是,在C++14中,可以使用constexpr if语句来帮助编译器判断是否可以将某些函数声明为constexpr。在以下示例中,如果使用C++14以上的编译器进行编译,则可以'foo”函数标记为constexpr:
template
auto foo(T t) {
if constexpr (std::is_integral_v)
return t * t;
else
return t;
}
在这个示例中,根据传递给函数的类型,使用“constexpr if”语句将函数标记为constexpr的可能性被判断。如果传递给函数的类型是整数,则该代码将返回该整数的平方,否则将返回原始值。