原标题: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的。