2015-12-20 240 views
12

我知道Java,現在想學習C++。我不明白cout(字符輸出流)和cin(字符輸入)是什麼。這些全局變量是什麼?那爲什麼cout/cin究竟是什麼?

"My message">>cout; 

不行?但是

cout<<"My message"; 

的作品。

+0

下面是一個簡單的說明,您可以從下面開始:http://www.cplusplus.com/reference/iostream/cin/ – Ziezi

+0

簡單的谷歌搜索可能會導致您的答案。 –

回答

22

cout是類std::ostream的一個實例,是的,它是一個全局變量。但operator>>(char *, ostream& os);還沒有被相關頭文件聲明,所以"My message">>cout;會給出類似於「無法找到運算符」的錯誤,該運算符需要參數const char *和std :: ostream「(並且可能還有更多的錯誤,因爲有時編譯器會被這些東西弄糊塗)。

cin是同樣的事情,除了std::istream

如果你真的想與人民頭上的一塌糊塗,你可以這樣做:

template<typename T> 
std::ostream& operator>>(T x, std::ostream& os) 
{ 
    os << x; 
    return os; 
} 

當然,它不會"My Message " >> "Some other string" >> cout;工作,這是可能是沒有這樣做的原因之一。

請注意,這只是輕微濫用操作符重載,其中我們有一個自定義類型作爲左側,而標準或非標準類型在右側。 cout與自定義類型的其他變量沒有區別。

+0

準確,非常有趣,+1 – manetsus

+1

更具體地說,cout是輸出類的一部分,cin是輸入類的一部分。 EX: 'std :: string str; std :: cout <<「輸入一個值:」;給std :: cin >>海峽; std :: cout <<「您輸入了」<< str << std :: endl;' –

1

將箭頭視爲流。 < <代表輸出流,而>>代表輸入流。

所以COUT < <「你好」是指輸出到屏幕 CIN當>>的裝置從用於可變的用戶輸入一個

COUT也可以用「+」等,例如可以添加更多的字符串要求一個流這樣

COUT < < 「你好」 < < 「世界」 < < 「我是約翰」;

CIN以同樣的方式可以從多個變量

CIN >> A >> B要求輸入;將要求用戶輸入兩次,每個變量一個

6

std::coutstd::cin確實是全局變量。你的代碼不會編譯,因爲這不是語言的工作方式。你必須把流放在左邊,然後是運算符,然後是流入/流出的變量。 (對於輸出,可以使用文字和表達式以及變量。)

1

iostream是一個頭文件,它包含處理控制檯輸入和輸出操作的類。它就像你創建一個對象,當你說輸入類處理頭文件中控制檯的輸入操作時輸入「cin」。同樣可以說關於「cout」,其中一個對象正在從一個處理輸出操作的類創建到頭文件中的控制檯。

當你考慮「cin」時,設想創建一個連接到控制檯和你的程序的管道和一個對象「cin」,從控制檯輸入你通過鍵盤提供的輸入並將它們轉儲到程序中。這就是您可以看到爲cin設置「>>」運算符的原因,並且您可以找到操作員正在執行指定對象「cin」方向的管道的類比。

對於「cout」,想象一下創建一個連接到控制檯和你的程序的管道和一個從程序中獲取輸入並將它們輸入到控制檯的對象「cout」。這就是您可以看到爲cout設置「< <」運算符的原因,並且您可以找到操作員正在執行指定對象「cout」方向的管道的類比。

所以基本上你需要先指定你將爲你的操作創建什麼對象,然後指定一個操作員來完成你的任務。如果你包含頭文件,那麼就像你可以在整個程序中的任何地方使用這些對象一樣。

所以,「我的信息」>> cout;不會按照您期望的方式運行,因爲沒有任何對象和操作員來完成您的任務,而cout < <「我的信息」;確實。

Mats Petersson描述了技術方面。這只是爲了給你一個關於實際發生的事情的概述。希望這可以幫助你。