Const
const
的两种核心角色:修饰值与修饰指针
-
修饰量(常量):表示一个变量的值在初始化后不更改
c++const int MAX_USERS = 100; // MAX_USERS = 200; // 编译器会报错
- 修饰指针/引用(只读访问) : 表示不能通过这个指针或引用来修改其指向的数据。这被称为引用语义 (Reference Semantics) 的
const
,是实现const
正确性的关键
- 修饰指针/引用(只读访问) : 表示不能通过这个指针或引用来修改其指向的数据。这被称为引用语义 (Reference Semantics) 的
const
与指针
const int* ptr;
- 不能通过
ptr
修改它指向的整数。*ptr = 10;
是非法的
int* const ptr;
- 指针
ptr
本身的值(即它存储的地址)不能被改变。ptr = &another_int;
是非法的
const int* const ptr;
- 指针本身和它指向的数据都不能被修改
函数接口中的const
:设计的核心
const
最重要的应用场景是在函数签名中,它定义了函数与调用者之间的"合同"
-
const
参数:明确函数的输入意图-
按
const
引用传递 (const T&
)-
对于非内置类型(如
std::string
,class
,struct
),使用const
引用传递可以:-
避免复制:提高性能,尤其是对大对象
-
保证安全:向调用者承诺函数内部不会修改传入的对象
c++// 一个设计良好的函数接口 void print_user_profile(const User& user);
-
-
-
const
成员函数:定义对象的"只读"行为-
在成员函数声明末尾的
const
是面向对象设计中的关键
c++class Database { public: // const成员函数,承诺不修改Database对象的状态 size_t get_record_count() const; // 非const成员函数,会修改对象的状态 void add_record(const Record& record); };
-
核心规则 :一个
const
对象只能调用其const
成员函数
c++const Database db; db.get_record_count(); // 正确 // db.add_record(...); // 错误!不能对一个const对象调用非const成员函数。
-
-