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;
例如,它可以用于在编译时以干净的方式生成值(如数学常数、三角查找表......)。
我在看 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;
例如,它可以用于在编译时以干净的方式生成值(如数学常数、三角查找表......)。