【发布时间】:2020-06-17 18:56:42
【问题描述】:
我正在做“使用 C++ 的编程原理和实践”中的练习 我找到了一个有这个成员函数here的类:
const vector<string> &get_name() const { return name; }
其中名称是一个向量:vector< string> name;
到目前为止,本书介绍了 2 个概念(最多 235 页):
-
返回一个const引用,防止函数改变返回值:
const vector<string> &get_name() { return name; } -
一个不能修改对象的 const 成员函数。在这种情况下,它会是这样的:
vector<string> get_name() const { return name; }
也许我没有完全理解这一点,但这两个概念不一样吗? 不想更改“名称”向量。
为什么需要两个“const”?
感谢任何花时间回复的人!
【问题讨论】:
-
它们不一样,因为第二个版本必须制作
name的(可能很昂贵)副本。 -
First
const仅适用于返回的对象,不能在 const 实例/对象上调用该方法。第二个适用于实例/对象,因此 const/non-const 实例都可以调用该方法。 -
第一个说“你不能改变你要求的东西,我可能会在你要求的时候改变”,第二个说“如果你求这个东西,你可以用我给你的东西做任何你想做的事”。这些不是同一个概念。
标签: c++ member-functions const-reference