簡體   English   中英

<<操作符如何工作?

[英]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 ++庫中沒有要求您執行此操作的限制。

這不是真的。 intint* ,和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.

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