C++ 模板元编程:constexpr 函数

C++ template metaprogramming: constexpr function

我在看 Bjarne Stroustrup 的演讲“The Essential C++”。

在问答session中,关于如何管理繁重的模板编程代码,他提到:"by constack perfunction you can eliminate essentially every template metaprogramming that generates a value by writting ordinary code"。

constack perfunction 只是听上去胡乱猜测。

请问该技术的正确术语是什么?这样我就可以做一些跟进阅读。

更新:将标题修改为"constexpr function"即可。

constexpr 函数,在 C++11 中添加,可以在编译时求值,并用作模板元编程中的模板参数。在 C++11 中,它们非常有限,可以(几乎)只包含一个 return 表达式。 C++14 减少了它们的限制。

例如,这是可能的:

constexpr std::size_t twice(std::size_t sz) {
    return 2 * sz;
}

std::array<int, twice(5)> array;

而在 C++11 之前,需要模板 'hacks',例如:

template<std::size_t sz>
class twice {
public:
    static const std::size_t value = 2 * sz;
}

std::array<int, twice<5>::value> array;

例如,它可以用于在编译时以干净的方式生成值(如数学常数、三角查找表......)。