簡體   English   中英

cout / cin到底是什么?

[英]What exactly are cout/cin?

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

"My message">>cout; 

不起作用?

cout<<"My message";

作品。

coutstd::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與自定義類型的其他一些變量沒有什么不同。

std::coutstd::cin實際上是全局變量。 您的代碼無法編譯,因為這不是該語言的工作方式。 您必須先將流放在左側,然后是運算符,然后是要流入/流出的變量。 (對於輸出,可以使用文字,表達式以及變量。)

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

所以cout <<“ hello”表示當cin >>時輸出到屏幕上>>表示從用戶輸入中詢問變量a

cout也可以使用“ +”,例如您可以像這樣向一個流添加更多字符串

cout <<“你好” <<“世界” <<“我是約翰”;

cin以相同的方式可以從多個變量中請求輸入

cin >> a >> b; 會要求用戶為每個變量輸入兩次

iostream是一個頭文件,其中包含處理控制台的輸入和輸出操作的類。 就像您在輸入文件的頭文件中為控制台處理輸入操作的輸入類說“ cin”時創建對象一樣。 對於“ cout”可以說是相同的,在“ cout”中,對象是從處理輸出操作的類創建到頭文件中的控制台的。

當考慮“ cin”時,想象一下創建一個連接到控制台和程序的管道,以及一個對象“ cin”,該對象將從控制台輸入的內容通過鍵盤提供,並將其轉儲到程序中。 這就是為什么您可以看到具有cin的“ >>”運算符,並且可以找到類似於該運算符要為對象“ cin”指定方向的管道的原因。

而對於“ cout”,想象一下創建一個連接到控制台和您的程序的管道,以及一個對象“ cout”,該對象從程序中獲取其輸入並將其轉儲到控制台上。 這就是為什么可以看到對cout使用“ <<”運算符,並且找到類似於該運算符執行指定對象“ cout”方向的工作的管道的原因。

因此,基本上,您首先需要指定要為操作創建的對象,然后分配一個操作員來完成任務。 如果包含頭文件,則可以在程序中的任何位置使用這些對象。

因此,“我的留言” >>提示; 不能按您期望的方式運行,因為沒有對象和操作員可以完成任務,而cout <<“我的消息”; 做。

Mats Petersson已描述了技術方面。 這只是為了讓您大致了解實際發生的圖像。 希望這對您有幫助。

暫無
暫無

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

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