簡體   English   中英

C ++語言中的cin函數問題

[英]Trouble with cin function in C++ language

我寫了一個小測試代碼:

#include <iostream>
using namespace std;

int main() {
    int a,b,c,d;
    cin>>a>>b,c>>d;
    cout<<a<<" "<<b<<" "<<c<<" "<<d;
    return 0;
}

我給了輸入:

1 2 3 4

輸出是:

1 2 0 0

但是從我的觀點來看,它應該給出一些錯誤,因為cin>>a>>b,c

為什么這段代碼沒有給出錯誤?

逗號是一個運算符,整數之間的>>是移位運算符(cin使用此運算符的重載版本)。 所以你的代碼相當於:

cin>>a>>b;
c>>d;

兩行都有效,你只是忽略第二次操作的結果

根據逗號運算符

在逗號表達式E1, E2 ,評估表達式E1,丟棄其結果,並且在表達式E2的評估開始之前完成其副作用(注意用戶定義的運算符,不能保證排序)。

所以你的代碼cin>>a>>b,c>>d; 相當於:

cin>>a>>b;
c>>d;     // built-in bitwise shift operator. Note c and d isn't initialized yet.

形式良好。

cin>>a>>b,c>>d;

應該:

cin>>a>>b>>c>>d;

它沒有給出任何錯誤,因為編譯器將你的表達式視為:

cin>>a>>b;
c>>d;  // bit-wise shift operator

逗號是一個有效的運算符,它將一個接一個地執行的表達式分開,並將最左邊的結果作為值返回。

所以:

a = b, c = d;

相當於:

a = b;
c = d;

因此,在您的情況下,您正在做兩個獨立但有效的事情:

cin >> a >> b, c >> d;

相當於:

cin >> a >> b;
c >> d;

c >> d是整數之間的有效二進制移位操作。

暫無
暫無

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

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