Cpp知识点汇总

## 预处理命令的标志符号,不允许出现在宏定义的开头和结尾,“##”字符串可以将两个独立的字符串连接成一个字符串。

memset() 须声明#include<cstring>

### C++ 函数模板知识点总结 #### 1. 函数模板的基本概念 函数模板是一种通用函数的实现方式,允许编写与类型无关的代码。通过使用模板参数 `typename` 或 `class`,可以定义适用于多种数据类型的函数[^2]。 ```cpp template <typename T> T add(T a, T b) { return a + b; } ``` 上述代码中,`add` 是一个函数模板,可以用于任何支持加法操作的类型。 #### 2. 函数模板的实例化 当调用函数模板时,编译器会根据传递的参数类型生成具体的函数版本。这种过程称为函数模板的实例化[^4]。 ```cpp int main() { cout << add(5, 3) << endl; // 实例化为 int 版本 cout << add(5.5, 3.2) << endl; // 实例化为 double 版本 return 0; } ``` #### 3. 函数模板的重载 函数模板可以与其他非模板函数或模板函数重载。在重载解析过程中,优先选择非模板函数,其次是显式特化模板,最后才是普通模板函数[^3]。 ```cpp int mymax(const int& a, const int& b) { cout << __func__ << " in func" << endl; return a > b ? a : b; } template <typename T> const T mymax(const T& a, const T& b) { cout << __func__ << " in template" << endl; return a > b ? a : b; } int main() { mymax(10, 20); // 调用非模板函数 mymax<>(10.1, 20.2); // 显式实例化模板函数 return 0; } ``` #### 4. 显式具体化 显式具体化是指为特定类型提供专门的模板实现。显式具体化的优先级高于普通模板函数[^3]。 ```cpp template <> const char* mymax<const char*>(const char* a, const char* b) { cout << "Specialization for const char*" << endl; return strcmp(a, b) > 0 ? a : b; } ``` #### 5. 可变参模板 C++11 引入了可变参模板,允许函数模板接受不定数量和类型的参数[^5]。 ```cpp template <typename T, typename... Args> void showall(T value, Args... args) { cout << value << endl; showall(args...); } template <typename T> void showall(T value) { cout << value << endl; } int main() { showall(1, 2.5, "Hello", 'A'); // 输出 1, 2.5, Hello, A return 0; } ``` #### 6. 模板元编程 模板元编程利用模板机制在编译期完成计算或生成代码。例如,计算阶乘的模板递归实现。 ```cpp template <int N> struct Factorial { static constexpr int value = N * Factorial<N - 1>::value; }; template <> struct Factorial<0> { static constexpr int value = 1; }; int main() { cout << Factorial<5>::value << endl; // 输出 120 return 0; } ``` #### 7. 模板约束(C++20) C++20 引入了 `concept`,允许对模板参数施加限制,从而提高代码的可读性和安全性[^1]。 ```cpp #include <concepts> template <std::integral T> T add(T a, T b) { return a + b; } int main() { cout << add(5, 3) << endl; // 合法 // cout << add(5.5, 3.2) << endl; // 编译错误 return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值