在C ++中,我看到了这段代码。
public:
Ports& GetPorts();
const Ports& GetPorts() const;
为什么有必要使用const的另一种方法? 编译器如何决定调用哪个方法?
答案 0 :(得分:6)
如果您致电x.GetPorts()
且x
是非const
对象,则会调用第一个版本。如果x
是const
对象,则另一方面,将调用第二个版本。这种代码说“如果对象是可修改的,则允许修改GetPorts()
的结果;如果对象是const
,则不允许修改结果。”如果匹配,编译器将更喜欢第一个版本;但是,如果对象为const
,则不会出现,因此将使用第二个版本。
答案 1 :(得分:3)
因为第一个重载不是const方法,所以不能通过temporaries和const对象调用它。如果提供const重载,则基本上支持const对象。
编译器将对const对象使用const重载,对非const对象使用none-const重载。
如果你的函数是const,通常没有必要提供重载,因为const函数和它们一样安全:它们既适用于const对象,也适用于非const对象。
答案 2 :(得分:1)
仅当您希望const和非const对象具有不同的行为时,才需要这样做。否则第二个版本就足够了。设计决定。