1. 程式人生 > >C++過載操作符的函式定義 詳細解讀

C++過載操作符的函式定義 詳細解讀

過載操作符的函式定義為什麼一定是如下的形式呢?

ostream & operator << (ostream & output, const ClassType & object)
{
    output << ...
    ...
    return output;
}

這裡有三個問題:
1)函式返回型別為什麼是引用?
2)第一個引數為什麼用引用?
3)第二個引數為什麼又是const引用?

1.返回引用是為了使得返回結果為左值,相當於一個獨立物件的作用,這樣可以做連續的輸出操作。

2.第一個引數之所以為引用:
a.首先式避免了IO物件的複製,注意,這裡不是刻意避免IO物件的複製,而是IO物件不可複製或者賦值,所以這裡必須是引用型別。


b.如果要傳遞或返回IO物件,則必須傳遞指向流物件的指標或者引用。
c.此外你可能會想,為什麼第二個形參用const而這邊不需要呢?
因為寫入流會改變流的狀態!

3.
a.對於要輸出的型別,避免了物件的賦值
b.一般輸出一個物件是不可以改變這個物件的,
c.const引用可以 使得傳遞引數更為靈活,

這裡的每個細節都是必須的,不能更改!