cpp I O操作符號返回數值問題

2021-09-23 21:27:23 字數 1455 閱讀 2569

i/o操作符號(《和》)返回數值

最近博問裡有幾個問題都牽涉到這一點了,簡單做筆記說明一下。

首先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 ()

vim操作符號

vi vim 是上linux非常常用的編輯器,很多linux發行版都預設安裝了vi vim vi vim 命令繁多但是如果使用靈活之後將會大大提高效率。vi是 visual inte ce 的縮寫,vim是vi improved 增強版的vi 在一般的系統管理維護中vi就夠用,如果想使用 加亮的話可...

Python數值運算操作符

操作符及使用 描述x y 加,x與y之和 x y減,x與 y之差 x y乘,x與y之積 x y除,x與y之商 10 3結果是3.3333333333333335 x y 整數除,x與y之整數商 10 3結果是3 xx本身 xx的負值 x y餘數,模運算 10 3結果是1 x y 冪運算,x的y次冪,...

python 格式化符號操作符

字串格式化符號含義 c c c 96,97,98 ab c c c 96,97,98,ab c c c 96,97,98 a b c c c 99,97,98 c a b d d d 4,5,4 5 4 5 9 x 10 a x 100 64 f 27.666 27.666000 e 27.666 ...