C++中的代码重用

0 阅读1分钟

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(标准模板库)全部基于模板实现。掌握模板是写出高效、可复用代码的关键。