關於cout<


關於ends是C++中比較基礎的一個東西,但是可能不是每個人都能夠清楚的理解這是個什么東西,我就經歷了這么一個過程,寫出來讓大家看看,有什么理解的不對的地方歡迎拍磚。

今天以前我對ends的理解是:輸出空格的工具,或者說這就是一個逼格比較高的“ ”。(這貌似是拜老師所賜,特地翻出課件發現就是這么寫的,輸出空格。。。相信有不少人是這么看的吧)

今天由於某些原因發現 cout<<ends;和cout<<" ";貌似不是一個東西,於是開始探究:

一、cplusplus的解釋(http://www.cplusplus.com/reference/ostream/ends/?kw=ends)

  這個網站是最權威的C++相關的網頁,在上面找到了ends的定義:

1 _CRTIMP inline basic_ostream<char, char_traits<char> >&
2  __cdecl ends(basic_ostream<char, char_traits<char> >& _O) 3  { 4     _O.put('\0'); 5      return (_O); 6  }

 

  從這我們不難發現ends實際上是輸出了一個'\0'字符,並不是我們想象的空格。

二、為什么有時候使用ends輸出的的確是空格

  同時我看到了msdn上的解釋(http://msdn.microsoft.com/zh-cn/library/a0cyxz1b.aspx),這個講的原理也是一樣的輸出'\0',但是下面有個例  子:

 1 // ostream_ends.cpp  2 // compile with: /EHsc
 3 #include <iostream>
 4 
 5 int main( )  6 {  7    using namespace std;  8    cout << "a";  9    cout << "b" << ends; 10    cout << "c" << endl; 11 }

 

  這個的輸出是

  ab c

  這又有點令人不解了,為什么這個ends當空格又能使了呢。於是我猜測是因為系統的差異,於是我進行了如下實驗:

  1、windows下運行

1 #include<iostream>
2 using namespace std; 3 int main() 4 { 5     cout<<"ddd"<<'\0'<<"dsad"<<endl; 6 }

 

  輸出:

  ddd dsad

  2、Ubuntu下運行同樣的代碼

  輸出:

  ddddsad

三、總結

  到這里我覺得這個原因就出來了,其實C++對ends的處理時一樣的,都是在緩沖區插入'\0'然后刷新,之所以在不同的系統下的顯示情況不同是因    為,windows和linux對'\0'的處理方式不同,在windows中會輸出一個空格,而linux下則不會有什么輸出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM