繁体   English   中英

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

[英]C++ template metaprogramming: constexpr function

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

在有关如何管理繁重的模板编程代码的问答环节中,他提到:“通过堆叠功能,您基本上可以消除所有通过编写普通代码而产生值的模板元编程”。

堆栈功能只是声音的疯狂猜测。

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

更新:只需将标题修改为“ constexpr函数”。

C ++ 11中添加的constexpr函数可以在编译时进行评估,并可以用作模板元编程中的模板参数。 在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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM