2012-11-03 13 views
6

可能性の重複:C++「int x =(anyInt1、anyInt2);」とは何ですか?平均?

#include <iostream> 

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

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

    return 0; 
} 

は、なぜこれがコンパイルされない:
why does 3,758,096,384 << 1 gives 768

今日、私は次のコードは、gccでコンパイルすることが判明しましたか? (...、...)の意味は?

+1

当然のことながら、実際の意味は、スマートなお尻がカンマ演算子を使用していることです。これはまれに正当化されます。 – Yakk

答えて

8

に等しいことは演算子であり、そのため(23,34)が表現であるだけ(23+34)のような表現である理由です。前者では,が演算子であり、後者では+が演算子です。

したがって、式(23,34)は、34の右端のオペランドを評価します。そのため、コード出力は34です。

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

int m = max(a,b); 

ここ,は、引数の区切りとして機能します。それは演算子として動作しません。したがって、関数に2つの引数を渡します。

しかしながら、ここ

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

最初,オペレータであり、第二,セパレータです。だから、3つではなく、2つの引数を関数に渡します。これは次のようになります。

希望します。 :-)

+3

この例のかっこの役割についての少しの注意は、操作者がより低い優先順位のthen then = operatorを持つように役立ちます。 int x = 23,34;まったくコンパイルされませんでした。 – Tomek

+0

@トメク:良い点。ありがとう。読者もあなたのコメントを見ることを願っています。 – Nawaz

+1

これはCにも当てはまります。 –

14

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

+0

そして、括弧は、例えば文をグループ化するために使用される場合とまったく同じです。 – mrbrdo

+0

ああ、そうです。私はC++にコンマ演算子があることを忘れていました。 thx – pwks