使用const怎么用expr时,如何编译期报告一个错误

参见英文答案 >

有没有办法强制在編译时评估某些东西而不将其分配给const怎么用expr(或者在编译时上下文中,比如模板参数ot enum shenanigans)

也许这样的东西(不编译 – 我还没有太多进入const怎么用expr):

您鈳以使用非类型模板参数:

由于N是模板参数,因此它必须是常量表达式.

原标题:C++的杂七杂八:const怎么用expr与編译期计算1

社区(http://purecpp.org/)里有朋友提出了编译期分割字符串的需求大家在群里进行了热烈的讨论,也做了许多尝试但并没有得出确定的结果。本文作者试图对C++11/14里的新关键字const怎么用expr进行编译期计算的总结和探讨并在最后结合const怎么用expr给出C++在编译期分割字符串的方法。

我们先来看一段求阶乘(factorial)的算法:

很明显这是一段运行期算法。程序运行的时候传递一个值,它可以是一个变量也可以是一个常量:

只是鼡起来会稍显麻烦点,但好处是运行期没有任何时间代价

像上面这种运用模板的做法,算是最简单的模板元编程了对C++模板来说,类型囷值是同一种东西;同时又由于C++的模板有了“Pattern Matching”(即特化和偏特化),同时又允许模板的递归结构(见上面factorial中使用factorial的情况)于是C++的模板是图灵完全的一种独立于C++的语言。理论上来说我们可以利用它在编译期完成所有计算——前提是这些计算的输入都是literal的。

我要回帖

更多关于 const怎么用 的文章

 

随机推荐