程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 關於cout<<ends你不知道的那些事

關於cout<<ends你不知道的那些事

編輯:C++入門知識

關於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下則不會有什麼輸出。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved