6

重複の可能性:
なぜ 3,758,096,384 << 1 で 768 になるのか

今日、次のコードが gcc でコンパイルされることがわかりました。

#include <iostream>

int main()
{
    int x = (23,34);

    std::cout << x << std::endl; // prints 34

    return 0;
}

これがコンパイルされるのはなぜですか?(..., ...) とはどういう意味ですか?

4

2 に答える 2

14

式では、コンマ演算子はすべてのオペランドを評価し、最後のものを返します。そのため、あなたの例では、xは 34 です。

于 2012-11-03T12:55:59.897 に答える
8

C++ では、,は演算子であるため、(23,34)は式と同じよう(23+34)に式です。前者,は演算子、後者+は演算子です。

したがって、式(23,34)は右端のオペランドに評価されます。34これが、コードが出力する理由です34

,関数呼び出しの演算子ではないことにも言及したいと思います。

int m = max(a,b);

ここで,は、引数の区切りとして機能します。オペレーターとしては機能しません。したがって、関数に 2 つの引数を渡します。

でも、

int m = max((a,b), c);

ここで、1 つ目は,演算子、2 つ目,はセパレータです。したがって、3 つではなく 2 つの引数を関数に渡すことは、次のようになります。

int m = max(b, c); //as (a,b) evaluates to b

それが役立つことを願っています。:-)

于 2012-11-03T12:58:43.350 に答える