用 const 复制相同的方法?

发布于 2024-10-21 08:27:08 字数 171 浏览 0 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吃不饱 2024-10-28 08:27:08

如果您调用 x.GetPorts() 且 x 是非 const 对象,则将调用第一个版本。另一方面,如果 x 是 const 对象,则将调用第二个版本。这类代码的意思是“如果对象是可修改的,则允许修改GetPorts()的结果;如果对象是const,则不允许修改结果予以修改。”如果匹配,编译器将优先选择第一个版本;但是,如果对象是 const,则它不会出现,因此将使用第二个版本。

If you call x.GetPorts() and x is a non-const object, the first version will be called. If x is a const 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 of GetPorts() to be modified; if the object is const, 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 is const and so the second version will be used instead.

述情 2024-10-28 08:27:08

因为第一个重载不是 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.

浪漫人生路 2024-10-28 08:27:08

仅当您希望 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文