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成员函数。 -
-