C++/const

Const

const的两种核心角色:修饰值与修饰指针

  1. 修饰量(常量):表示一个变量的值在初始化后不更改

    c++ 复制代码
    const int MAX_USERS = 100;
    // MAX_USERS = 200;  // 编译器会报错
    1. 修饰指针/引用(只读访问) : 表示不能通过这个指针或引用来修改其指向的数据。这被称为引用语义 (Reference Semantics)const,是实现const正确性的关键

const与指针

const int* ptr;

  1. 不能通过ptr修改它指向的整数。*ptr = 10; 是非法的

int* const ptr;

  1. 指针ptr本身的值(即它存储的地址)不能被改变。ptr = &another_int; 是非法的

const int* const ptr;

  1. 指针本身和它指向的数据都不能被修改

函数接口中的const:设计的核心

const最重要的应用场景是在函数签名中,它定义了函数与调用者之间的"合同"

  1. const参数:明确函数的输入意图

    1. const引用传递 (const T&)

      1. 对于非内置类型(如std::string, class, struct),使用const引用传递可以:

        1. 避免复制:提高性能,尤其是对大对象

        2. 保证安全:向调用者承诺函数内部不会修改传入的对象

        c++ 复制代码
        // 一个设计良好的函数接口
        void print_user_profile(const User& user);
    2. const成员函数:定义对象的"只读"行为

      1. 在成员函数声明末尾的const是面向对象设计中的关键

      c++ 复制代码
      class Database {
      public:
          // const成员函数,承诺不修改Database对象的状态
          size_t get_record_count() const;
      
          // 非const成员函数,会修改对象的状态
          void add_record(const Record& record);
      };
      1. 核心规则 :一个const对象只能调用其const成员函数

      c++ 复制代码
      const Database db;
      db.get_record_count(); // 正确
      // db.add_record(...); // 错误!不能对一个const对象调用非const成员函数。
相关推荐
June`9 小时前
warp shuffle指令
c++·人工智能·算法·cuda
乱七八糟的屋子9 小时前
【C++数值计算】NumCpp超详细入门教程(纯正Numpy语法、零学习成本、C++首选科学计算库、性能压测对比)
c++·数值计算·numpy·高性能计算·科学计算·ndarray
choumin10 小时前
C程序能调用extern “C“声明的带默认参数的C++函数吗?
c语言·c++·extern c·默认参数
AmyLin_200110 小时前
PDF 色彩保真工程实践【3】上手实践:工程结构、依赖集成与一键构建运行
c++·visualstudio·pdf·zlib·vcpkg·libtiff·cmyk
并不喜欢吃鱼10 小时前
从零开始 C++------ 十六.深度拆解 C++ 智能指针:unique_ptr/shared_ptr/weak_ptr 底层模拟、内存泄漏根治
开发语言·c++
不相心 -w-10 小时前
Cmake的基础用法
linux·开发语言·c++
撑伞的鱼993710 小时前
C++开发用什么AI编程工具效果好?2026年实测横评(附选型指南)
开发语言·c++·ai编程·cursor
j7~11 小时前
【Linux】二十八.线程篇五《Linux多线程编程:线程同步之条件变量》---详解
linux·运维·c++·学习·条件变量·线程同步
王老师青少年编程11 小时前
2026年全国青少年信息素养大赛算法应用主题赛C++赛项【决赛】模拟卷3:文末附答案
c++·答案·模拟题·2026年·青少年信息素养大赛·算法应用主题赛·决赛
程序喵大人11 小时前
【C++进阶】STL容器与迭代器 - 10 把容器、迭代器和数据流串成一个小程序
开发语言·c++·容器·小程序·迭代器·stl