C cin返回值問題

2021-08-15 11:30:09 字數 1405 閱讀 7762

**:

首先cin是乙個物件,不會"返回"值,>>和《才是方法,具有返回值。>>和《操作符的運算順序是由左向右邊,所以下面的兩種語句描述其實是一致的:

cin>>a>>b>>c;
(((cin>>a)>>b)>>c);
操作cin>>a的意義: 呼叫istream的operator>>方法讀取資料並存入變數a中。那麼》或者《的返回值是什麼呢?這裡說的返回值並不是指讀入變數中的值,而是返回賦給左值的資料,在這裡, >>返回的是cin,追蹤原始碼可以發現這一點:

istream& operator>> (istream& is, char& ch );
istream& operator>> (istream& is, signed char& ch );
istream& operator>> (istream& is, unsigned char& ch );
istream& operator>> (istream& is, char* str );
istream& operator>> (istream& is, signed char* str );
istream& operator>> (istream& is, unsigned char* str )
當然也可以測試如下:

if ((cin >> a) == cin)  else
為什麼可以使用cin作為真值判定條件

cin可以被如下使用:

if(cin){}
if(cin>>a>>b){}
while(cin>>a){}
上面說到了》的返回值是cin,所裡上面的真值判定等同於:

if(cin){}
if(cin){}
while(cin){}
如果cin的狀態ok則為真,如果cin遇到eof或者發生錯誤則返回false, 為什麼可以使用cin作為真值判定條件?

首先看cin是如何定義的:

extern istream cin;
這樣的乙個值怎麼可以作為if的真值判定條件呢?這是因為在if(cin)或者while(cin)的時候,其實是呼叫了乙個istream的方法,寫一行簡單的**反彙編看一下:

int main()
return 0;
}
對應的彙編**如下:

其實所有派生自ios的類都可以被強制轉換為乙個指標,如果設定了錯誤標誌位則指標為null,否則非null,測試如下**:
#include
#include
using

namespace std;

int main ()

C cin 和cout 返回值問題

int tmain return 0 程式一直在while 裡面迴圈,不知道為什麼,留個疑問,等以後再來看看。解決無法退出迴圈的辦法是 輸入 asasdfasd等字元後,按下enter鍵,然後再輸入組合鍵 ctrl z,再enter。就可以退出程式了。至於原理,主要是因為看到了一下的文章 cin是終...

ExecuteNonQuery 返回值問題

關於sqldatacommand.executenonquery 方法 msdn曰 可以使用executenonquery執行編錄操作 例如查詢資料庫的結構或建立諸如表等的資料庫物件 或通過執行 update insert 或 delete 語句更改資料庫中的資料。雖然executenonquery...

返回值優化問題

近來看到小李子寫了篇blog,題目為返回值優化。文章如下。return integer left.i right.i 建立乙個臨時物件並返回他,不會呼叫析構函式,效率高。interger tmp left.i right.i return tmp 建立了區域性物件,有析構函式。這裡感覺有些詭異。於是...