元编程_basic
1.
1 #include <iostream> 2 #define C11 1 3 4 template<int N> 5 class Fac 6 { 7 public: 8 #if C95 9 //enum { value = N * Fac<N-1>::value }; 10 #endif 11 #if C11 12 static inline constexpr auto value = N * Fac<N - 1>::value; 13 #endif 14 }; 15 16 17 template<> 18 class Fac<0> 19 { 20 public: 21 #if C95 22 //enum { value = 1 }; 23 #endif 24 #if C11 25 static inline constexpr auto value = 1; 26 #endif 27 }; 28 29 //---- <sqrt ---- 30 template<int N, int LO = 1, int HI = N> 31 struct Sqrt { 32 static constexpr auto mid = (LO + HI + 1) / 2; 33 static constexpr auto value = 34 (N < mid * mid) ? 35 Sqrt<N, LO, mid - 1>::value 36 : 37 Sqrt<N, mid, HI>::value; 38 }; 39 40 template<int N, int M> 41 struct Sqrt<N, M, M> { // 终止条件为LO和HI相等 42 static constexpr auto value = M; 43 }; 44 45 //---- sqrt/> ---- 46 47 int main() 48 { 49 std::cout << Fac<5> ::value << '\n'; 50 std::cout << Sqrt<16>::value << '\n'; 51 return 0; 52 }
2.
3.
3.1
constexpr的第一个作用:给编译器足够的信心在编译期去做被constexpr修饰的表达式的优化。
constexpr还有另外一个特性,虽然它本身的作用之一就是希望程序员能给编译器做优化的信心,但它却猜到了自己可能会被程序员欺骗,而编译器并不会对此“恼羞成怒”中止编译.
3.2
《C++ Templates 2nd》
other:在工程中的使用场景有限,毕竟即使能用上,也要考虑代码的可读性和维护性,否则反而会被当作炫技。最实用的场景,应该是用来写库
4.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通