Not able to understand the reason for output

后端 未结 3 1742
粉色の甜心
粉色の甜心 2021-01-14 04:31

I am running a code snippet. But I am not able to understand the code and the output that it is producing.

#include 
int main()  
{ 
  int a,          


        
相关标签:
3条回答
  • 2021-01-14 04:57

    Take care to notice that the comma operator may be overloaded in C++. The actual behaviour may thus be very different from the one expected.

    As an example, Boost.Spirit uses the comma operator quite cleverly to implement list initializers for symbol tables. Thus, it makes the following syntax possible and meaningful:

    keywords = "and", "or", "not", "xor";
    

    Notice that due to operator precedence, the code is (intentionally!) identical to

    (((keywords = "and"), "or"), "not"), "xor";
    

    That is, the first operator called is keywords.operator =("and") which returns a proxy object on which the remaining operator,s are invoked:

    keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor");
    
    0 讨论(0)
  • 2021-01-14 05:05

    Consider the precedence of the C's comma operator.

    0 讨论(0)
  • 2021-01-14 05:06
    1. When you have a comma, the expression is evaluated as the right parameter, that's why d=(a,b); is evaluated as d=b.
    2. = has a higher precedence over the comma, so the expression c=a,b; is evaluated as (c=a),b;

    Not part of the answer, but worth mentioning that the whole c=a,b; expression, is evaluated as b, not a, e.g. if you write d=(c=a,b); you get c=a AND d=b;

    0 讨论(0)
提交回复
热议问题