3

これはインタビューで聞かれました。以下のスニペットの出力は何ですか?

#include <iostream>
using namespace std;

int main() {
    cout << (3,2,1)-(1,2,3) << endl; // in C++ too this prints -2
    printf("%d\n",(3,2,1)-(1,2,3)); // prints -2
    printf("%d\n",("%d",3,2,1)-(1,2,3)); // prints -2
    return 0;
}

出力によって、私はその (1-3) = -2 を推測しています。しかし、どのように(3,2,1)価値1が選ばれるのか、同様に(1,2,3)価値3が選ばれるのか? 私が推測していることは正しいですか?

4

4 に答える 4

1

コンマ演算子 (,) を考慮する必要があります。

コンマ演算子 (,) は、式が 1 つだけ必要な場合に含まれる 2 つ以上の式を区切るために使用されます。値に対して式のセットを評価する必要がある場合、最も右側の式のみが考慮されます。

あなたの場合:

(3,2,1) //evaluates to 1
(1,2,3) //evaluates to 3

ソース: http://www.cplusplus.com/doc/tutorial/operators/

于 2015-07-09T09:40:43.637 に答える
1

コンマ演算子は常に最後の値を返します。

  1. 最初coutは 1-3=-2 です
  2. 次に、printfまた 1-3=-3 です
  3. 最後にprintf、また 1-3=-2 です

コンマ演算子は常にすべての左側の式 (オペランド) を解決し、一番右のオペランドを結果として返すだけrvalueです。

于 2015-07-09T09:41:07.967 に答える