14.1包含对象成员的类
14.1.1函数定义时的const
T& operator[](int index) {
return data[index];
}
const T& operator[](int index) const {
return data[index];
}
这两个函数定义有什么区别
| 方面 | 第一个版本 | 第二个版本 |
|---|---|---|
| 函数签名 | T& operator[](int index) | const T& operator[](int index) const |
| 返回值类型 | T&(非常量引用) | const T&(常量引用) |
| 函数是否为 const | 否(可以修改对象) | 是(承诺不修改对象) |
| 谁能调用 | 非常量对象 | 常量对象和非常量对象 |
| 能否修改元素 | ✅ 可以修改 data[index] | ❌ 不能修改(只读) |
两个版本都提供了,才能让对象在可修改和只读两种场景下都正常工作。
14.1.2函数模板和类模板
函数模板和类模板是 C++ 中泛型编程的核心特性
| 特性 | 函数模板 | 类模板 |
|---|---|---|
| 定义 | template<typename T> T func(T a) | template<typename T> class Class {...} |
| 实例化 | 编译器根据调用自动推导 | 必须显式指定:Class<int> obj; |
| 特化 | 可以特化特定类型 | 可以特化特定类型 |
| 默认参数 | C++11起支持 | 支持 |
| 用途 | 算法、工具函数 | 容器、数据结构 |
简单理解:
- 函数模板:写一次函数,适用于多种类型
- 类模板:写一次类,适用于多种类型
模板是现代 C++ 的基石,STL(标准模板库)全部基于模板实现。掌握模板是写出高效、可复用代码的关键。