用 const 复制相同的方法?
在 C++ 中,我看到了这段代码。
public:
Ports& GetPorts();
const Ports& GetPorts() const;
为什么需要另一种带有 const 的方法? 编译器如何决定调用哪个方法?
In C++, I see this code.
public:
Ports& GetPorts();
const Ports& GetPorts() const;
Why is it necessary to have another method with const?
How can a compiler decide which method is called?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您调用 x.GetPorts() 且 x 是非 const 对象,则将调用第一个版本。另一方面,如果 x 是 const 对象,则将调用第二个版本。这类代码的意思是“如果对象是可修改的,则允许修改
GetPorts()
的结果;如果对象是const
,则不允许修改结果予以修改。”如果匹配,编译器将优先选择第一个版本;但是,如果对象是 const,则它不会出现,因此将使用第二个版本。If you call
x.GetPorts()
andx
is a non-const
object, the first version will be called. Ifx
is aconst
object, on the other hand, the second version will be called. That kind of code is saying "if the object is modifiable, allow the result ofGetPorts()
to be modified; if the object isconst
, don't allow the result to be modified." The compiler will prefer the first version if it matches; however, it will not be present if the object isconst
and so the second version will be used instead.因为第一个重载不是 const 方法,所以您不能通过临时对象和 const 对象调用它。如果您提供 const 重载,那么您本质上就支持 const 对象。
编译器将对 const 对象使用 const 重载,对非 const 对象使用非 const 重载。
如果您的函数是 const,通常不需要提供重载,因为 const 函数非常安全:它们既适用于 const 对象,也适用于非 const 对象。
Because the first overload is not a const method you can't call it over temporaries and const objects. If you provide a const overload you essentially support const objects.
The compiler will use the const overload for const objects and the none-const overload for none-const objects.
It is usually not necessary to provide an overload if your function is const, because const functions are as safe as they get: they work for both const objects and none-const objects.
仅当您希望 const 和非常量对象具有不同的行为时,这才是必需的。否则第二个版本就足够了。一个设计决定。
This is necessary only if you want to have different behavior for const and non-const objects. Otherwise the second version is enough. A design decision.