。1
.11
编译期引入计算 ==> 元编程
C++为什么快?因为在编译期可以进行处理优化
Python编译也会生成 .pyc文件
元编程希望在编译期引入更多的计算。那么,哪些运算可以放到编译期?
经典模版元程序
template <int x>
struct M
{
constexpr static int val = x+1;
};
int main()
{
return M<3>::val;
}
输入输出,上述计算在编译期完成。
顺序调用
一个参数作为输入的元编程
复杂一点,两个参数作为输入的元编程
分支调用
if constexpr
if constexpr 可以引入编译期分支
如果不小心写成了if, 就变成了运行期分支
偏特化引用
例1:
例2:
template <int x>
requires (x<100)
struct Imp<x>
{
constexpr static int value = x*2;
using type = int;
};
template <int x>
requires (x>=100)
struct Imp<x>
{
constexpr static int value = x-3;
using type = int;
};
constexpr auto x = Imp<100>::value;
int main()
{
std::cout<<x<<std::endl;
}
conditional 引入分支
enable_if 引入分支
太复杂了,不想听了。。。。
循环调用
利用特化来实现循环体调用的结束
。。。。未完待续