簡體   English   中英

在std命名空間中operator <<是什么做的?

[英]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

前兩個是有效的,因為它們調用帶有兩個參數的非成員函數。 charchar const*作為參數的函數定義為非成員 (自由)函數。

但是,將int作為參數的函數定義為成員函數,這意味着第三個函數需要調用成員函數。 如果將其作為非成員函數調用,則必須將int轉換為存在非成員函數的某種類型 因此,當考慮這種轉換時,會導致模糊,因為有許多可能的轉換同樣好。

如上所述,這應該工作:

cout.operator<<(1); //should work

至於為什么某些功能被定義為成員而其他功能被定義為非成員,我不知道答案。 它需要對導致這種圖書館設計的提案和決策進行大量研究。

我總是理解charunsigned charchar*被定義為basic_ostream之外的非成員函數的原因是因為它更容易重載它們。

看,所有其他operator<<使用char作為構建塊。 因此,如果要創建專用於特定charT字符類型和/或traits特征類型的ostream ,則只需要專門化這些operator<<函數。

如果它們是成員函數,您必須專門處理整個類(基本上重新創建所有類成員函數)。

我不確定這是唯一的原因,但這就是我一直看到它的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM