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,
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");
Consider the precedence of the C's comma operator.
d=(a,b);
is evaluated as d=b
.=
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
;