[英]what does operator<< in std namespace do?
當然下面的代碼工作(它調用std :: cout :: operator <<):
cout << 1 << '1' << "1" << endl;
碰巧發現還有std :: operator <<,它似乎只適用於char或char *參數:
operator<<(cout, '1'); // ok
operator<<(cout, "1"); // ok
operator<<(cout, 1); // error
那么為什么我們需要這個運算符以及如何使用它?
謝謝。
operator<<(cout, '1'); // ok
operator<<(cout, "1"); // ok
operator<<(cout, 1); // error
前兩個是有效的,因為它們調用帶有兩個參數的非成員函數。 將char
和char const*
作為參數的函數定義為非成員 (自由)函數。
但是,將int
作為參數的函數定義為成員函數,這意味着第三個函數需要調用成員函數。 如果將其作為非成員函數調用,則必須將int
轉換為存在非成員函數的某種類型 。 因此,當考慮這種轉換時,會導致模糊,因為有許多可能的轉換同樣好。
如上所述,這應該工作:
cout.operator<<(1); //should work
至於為什么某些功能被定義為成員而其他功能被定義為非成員,我不知道答案。 它需要對導致這種圖書館設計的提案和決策進行大量研究。
我總是理解char
, unsigned char
和char*
被定義為basic_ostream
類之外的非成員函數的原因是因為它更容易重載它們。
看,所有其他operator<<
使用char
作為構建塊。 因此,如果要創建專用於特定charT
字符類型和/或traits
特征類型的ostream
,則只需要專門化這些operator<<
函數。
如果它們是成員函數,您必須專門處理整個類(基本上重新創建所有類成員函數)。
我不確定這是唯一的原因,但這就是我一直看到它的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.