通过constexpr隐式标记所有函数

时间:2016-02-03 04:50:36

标签: c++ c++11 stl c++14 constexpr

有没有理由不在C ++ 11之后隐式标记所有函数contexpr?我认为“Caedite eos!Novit enim Dominus qui sunt eius”的原则可以在这里工作,因为如果:

template< typename T >
constexpr
T f(T t) { return t; }

int main(int argc, char *argv[])
{
    f(1);
    f(argc);
    return 0;
}

f(argc)自动识别为constexpr,而不是f(1)。一方面,编译器可以自然地推断出constexpr说明符本身对函数的适用性,通常可以是constexpr,另一方面它可以确保函数永远不会是constexpr它们与the rules for constexpr functions不匹配。

STL 也存在很多问题。比如说,关于非constexpr operator []const std::array在常量表达式中或关于非constexpr std::swap,这会阻止使用std::swap在常量表达式中。

为什么没有默认情况下为所有函数(甚至是语句,表达式和子表达式)启用隐式constexpr说明符这样的语言功能?有性能原因或其他原因吗?

0 个答案:

没有答案