当前位置: 首页 > news >正文

Effective C++ 条款03:尽可能使用const

Effective C++ 条款03:尽可能使用const


核心思想const 是 C++ 中强大的语义约束工具,能帮助编译器侦测错误、提高代码可读性、并支持编译器优化。

1. 定义常量
const int MAX_SIZE = 100;     // 替换宏定义,类型安全
const std::string NAME = "Alice";

2. 修饰指针
  • 指向常量的指针(底层 const

    const char* p = "Hello";  // 数据不可变
    // p[0] = 'X';            // 错误:禁止修改
    p = "World";              // 允许指向新地址
    
  • 常量指针(顶层 const

    char greeting[] = "Hello";
    char* const p = greeting;  // 指针不可变
    p[0] = 'X';                // 允许修改数据
    // p = greeting + 1;      // 错误:禁止修改指针
    

3. 修饰迭代器
std::vector<int> vec{1, 2, 3};
const std::vector<int>::iterator iter = vec.begin(); // 类似 T* const
*iter = 10;        // 允许修改数据
// iter++;          // 错误:迭代器不可移动std::vector<int>::const_iterator cIter = vec.cbegin(); // 类似 const T*
// *cIter = 20;     // 错误:数据不可修改
cIter++;           // 允许移动迭代器

4. 修饰函数参数与返回值
  • 参数:避免意外修改

    void print(const std::vector<int>& data) {// data.push_back(4);  // 错误:const引用禁止修改for (auto num : data) std::cout << num << " ";
    }
    
  • 返回值:防止误操作

    const int getMagicNumber() { return 42; }
    // getMagicNumber() = 0;  // 错误:返回值不可修改
    

5. const 成员函数
  • 核心作用

    • 标记不修改对象状态的成员函数。
    • 允许 const 对象调用。
  • 示例

    class TextBlock {char* pText;
    public:// const版本:供const对象调用const char& operator[](size_t pos) const {return pText[pos];  // 返回const引用}// 非const版本:供普通对象调用char& operator[](size_t pos) {return pText[pos];  // 返回非const引用}
    };void demo() {const TextBlock ctb("World");TextBlock tb("Hello");tb[0] = 'h';      // 正确:调用非const版本// ctb[0] = 'w';   // 错误:调用const版本,返回值不可修改
    }
    

6. mutable 突破 const 限制
class CachedData {
private:mutable int cache;      // 允许const成员函数修改bool cacheValid = false;
public:int getValue() const {if (!cacheValid) {cache = compute();  // 允许修改mutable成员cacheValid = true;}return cache;}int compute() const { /* ... */ }
};

关键总结

  1. 声明常量时优先使用 const 而非 #define
  2. 使用 const 指针/迭代器明确数据或指针的可变性。
  3. 函数参数传递时,对不改动的对象使用 const& 避免拷贝。
  4. 为不修改成员变量的函数添加 const 修饰符。
  5. 当成员变量需要在 const 函数中修改时,使用 mutable

重要提醒

  • const 成员函数的重载:根据调用对象的 const 性自动选择版本。
  • const 对象可调用 const 成员函数(反之不成立)。
http://www.dtcms.com/a/300315.html

相关文章:

  • 检验类设备中,交叉导轨如何确保加样精度?
  • mysql-数据表-DDL语句
  • Triton源代码分析 - 目录
  • freeRTOS 静态创建任务
  • TIM 输入捕获
  • pip, github 突然连不上?报错和解决方法如下
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-29,(知识点:非易失存储器)
  • 【AI周报】2025年7月26日
  • CUDA杂记--FP16与FP32用途
  • MoE替代LLM
  • linux内核电源管理
  • 面试150 加一
  • 一文速通《多元函数微分学》
  • C++11 右值引用 Lambda 表达式
  • AutoDL 数据盘清理指南:彻底删除 .Trash-0 内文件释放空间
  • 电脑负载监控接入了IOT物联网平台
  • 深入浅出 MyBatis-Plus Wrapper:让条件构造更简单高效
  • 定义域第一题
  • iview: 对输入框进行Poptip 换行提示
  • python---元组解包(Tuple Unpacking)
  • 银行营销数据预测分析:从数据到精准营销决策
  • 表征工程 中怎么 调整参数或比例
  • 【RHCSA 问答题】第 13 章 访问 Linux 文件系统
  • 水下目标识别准确率↑89%!陌讯多模态融合算法在智慧水务的落地实践
  • ArkData-关系型数据库
  • 测试分类
  • Swagger 配置及使用指南
  • Redis C++客户端——通用命令
  • 多模态大模型与 AI 落地:从技术原理到实践路径的深度解析
  • 力扣刷题(第九十九天)