【发布时间】:2017-01-11 07:11:30
【问题描述】:
在我的理解中,编译时计算是任何可以由编译器计算的东西,而不是在程序执行期间为了提高性能而计算的那部分。当程序执行时可以进行迭代计算,但在编译时计算期间不允许。一个麻烦且具体的示例是可变参数模板,其中人们自然会想到迭代来处理提供的各种类型,但标准和编译器迫使程序员递归地处理它们。
一般来说,所有编译时计算都是通过递归而不是迭代来处理的。据我所知,预计在编译时计算的 constexpr 函数也应该是递归的。是什么让任何编译时都禁止迭代?
【问题讨论】:
-
递归是一种迭代形式。
-
你也可以使用
std::integer_sequence -
c++14 现在允许对
constexpr函数进行常规迭代。问题是检查函数是constexpr。递归和没有迭代更容易。 -
@rici 我会争辩。
标签: c++ compiler-construction variadic-templates constexpr compile-time