2011-03-09 76 views
1

在C++中,我看到了這段代碼。與const重複相同的方法?

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

爲什麼需要使用const的另一種方法? 編譯器如何決定調用哪個方法?

回答

6

如果您致電x.GetPorts()x是非const對象,則將調用第一個版本。如果xconst對象,則另一方面將調用第二個版本。這種代碼說:「如果對象是可修改的,則允許修改GetPorts()的結果;如果對象是const,則不要修改結果。」如果匹配,編譯器會首選第一個版本;但是,如果對象是const,則它不會出現,因此將使用第二個版本。

3

因爲第一個重載不是const方法,所以不能通過臨時對象和const對象調用它。如果你提供了一個const超載,你基本上支持const對象。

編譯器將對const對象使用const重載,非const對象使用非const重載。

如果你的函數是const,通常不需要提供重載,因爲const函數的安全性如下:它們適用於const對象和非const對象。

1

只有當你想對const和非const對象有不同的行爲時,這是必須的。否則第二個版本就足夠了。一個設計決定。

+0

行爲可能相同。通常這些功能只有不同的返回類型。 – UncleBens 2011-03-09 15:56:23

+0

@UncleBens:當然,如果他們返回不同的東西,他們是不同的。那麼你需要兩個,否則不需要。如果你沒有返回一個可修改的對類成員的引用,你可以避免很多這樣的情況, – 2011-03-09 16:03:43