const string getWord() ;和 string getWord() const ;是一样的效果吗
不一样,这两个声明完全不是一回事 ,const
修饰的位置不同,作用也不同。我帮你拆解一下:
1. const string getWord();
- const 修饰的是返回值
- 表示这个函数返回的
string
对象是一个常量 (const string
),外面不能修改它。 - 例子:
cpp
运行
const string s = obj.getWord();
s[0] = 'A'; // ❌ 编译错误,因为 s 是 const
- 注意:如果返回的是值类型 (而不是引用),那么
const
修饰返回值意义不大,因为外部拿到的只是一个临时副本,本来也没法直接修改原对象(除非用户用引用接收)。
2. string getWord() const;
- const 修饰的是成员函数本身(只能出现在类的成员函数声明中)
- 表示这个函数是一个常量成员函数 ,它不能修改类的非
mutable
成员变量 ,也不能调用非const
的成员函数。 - 它的作用是保证这个函数不会改变对象的状态。
- 例子:
cpp
运行
class MyClass {
string word;
public:
string getWord() const; // 常量成员函数
};
string MyClass::getWord() const {
word = "abc"; // ❌ 编译错误,不能修改成员变量
return word;
}
3. 两者区别总结表
声明形式 | const 修饰对象 | 作用效果 |
---|---|---|
const string getWord(); |
返回值 | 返回的字符串是常量,外部不能修改它(意义有限,因为返回的是副本) |
string getWord() const; |
成员函数本身 | 函数内部不能修改类的成员变量(保证 const 对象可以调用它) |
4. 关键记忆点
const
在函数返回类型前 → 限制返回值不可修改const
在函数参数列表后 → 限制成员函数不能修改对象内部状态(常成员函数)
✅ 口诀:
前 const 管返回,后 const 管函数。