[英]How does the << Operator exactly work?
我在理解<<運算符時遇到一些問題。
如果我有:
#include <iostream>
using namespace std;
//...
int t = 5;
cout << "test is: " << t << endl;
現在調用函數operator <<。
ostream& operator<<(ostream& out, string* s)
{
return out << s << endl;
}
ostream& operator<<(ostream& out, int* value)
{
return out << value << endl;
}
字符串指針指向帶有值test的地址是:但是out
元素引用的是什么( cout
?)? 並且ostream&的功能主體是否正確?
非常感謝您的解釋。
首先,讓我們修復您的代碼:運算符應采用const
引用或值而不是指針:
ostream& operator<<(ostream& out, const string& s) // const reference
ostream& operator<<(ostream& out, int i) // value
現在,您的問題是:您是對的, out
參數接收對cout
的引用,或者從<<
左側的表達式返回的ostream&
是什么。 盡管<<
左邊的表達式不一定是cout
,但是-其他常見情況是其他<<
運算符*的結果,用於鏈接和流操縱器。 在所有情況下,這些表達式都返回對ostream
的引用,以便“鏈”可以繼續。
* operator<<
返回ostream&
的原因是為了可以鏈接輸出。 在絕大多數情況下,您都會返回ostream&
第一個參數相同的ostream&
,盡管標准C ++庫中沒有要求您執行此操作的限制。
這不是真的。 它int
不int*
,和char const*
不是string*
。
在本示例中, out
當然是指std::cout
。 還有什么呢?
而且,沒有任何一個機構在任何方面都不是正確的,它們試圖無限地重新喚起自己,並且什么也不做。
int t = 5;
cout << "test is: " << t << endl;
第一個電話是:
ostream& operator<<(ostream& out, const char* str)
出=出局
str =“ test is:”
第二次調用將應用於第一次調用返回的對象ostream
。
ostream& operator<<(ostream& out, int x)
出=出局
設
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.