用const复制相同的方法?

时间:2011-03-09 03:33:16

标签: c++ methods const

在C ++中,我看到了这段代码。

public: 
    Ports& GetPorts();
    const Ports& GetPorts() const;

为什么有必要使用const的另一种方法? 编译器如何决定调用哪个方法?

3 个答案:

答案 0 :(得分:6)

如果您致电x.GetPorts()x是非const对象,则会调用第一个版本。如果xconst对象,则另一方面,将调用第二个版本。这种代码说“如果对象是可修改的,则允许修改GetPorts()的结果;如果对象是const,则不允许修改结果。”如果匹配,编译器将更喜欢第一个版本;但是,如果对象为const,则不会出现,因此将使用第二个版本。

答案 1 :(得分:3)

因为第一个重载不是const方法,所以不能通过temporaries和const对象调用它。如果提供const重载,则基本上支持const对象。

编译器将对const对象使用const重载,对非const对象使用none-const重载。

如果你的函数是const,通常没有必要提供重载,因为const函数和它们一样安全:它们既适用于const对象,也适用于非const对象。

答案 2 :(得分:1)

仅当您希望const和非const对象具有不同的行为时,才需要这样做。否则第二个版本就足够了。设计决定。