在,
所有三个声明中使用
int a = (1,2,3); int b = (++a, ++a, ++a); int c = (b++, b++, b++);
是逗号运算符.它计算第一个操作数1并丢弃它,然后计算第二个操作数并返回其值.因此,
int a = ((1,2), 3); // a is initialized with 3. int b = ((++a, ++a), ++a); // b is initialized with 4+1+1 = 6. // a is 6 by the end of the statement int c = ((b++, b++), b++); // c is initialized with 6+1+1 = 8 // b is 9 by the end of the statement.
1在逗号运算符的情况下,从左到右保证评估顺序.
在,
所有三个声明中使用
int a = (1,2,3); int b = (++a, ++a, ++a); int c = (b++, b++, b++);
是逗号运算符.它计算第一个操作数1并丢弃它,然后计算第二个操作数并返回其值.因此,
int a = ((1,2), 3); // a is initialized with 3. int b = ((++a, ++a), ++a); // b is initialized with 4+1+1 = 6. // a is 6 by the end of the statement int c = ((b++, b++), b++); // c is initialized with 6+1+1 = 8 // b is 9 by the end of the statement.
1在逗号运算符的情况下,从左到右保证评估顺序.
代码没有任何好处,没有正确思想的人会写它.你不应该花时间查看那种代码,但我仍然会给出解释.
逗号运算符,
表示"执行左边的操作,丢弃任何结果,执行正确的操作并返回结果.将部分放在括号中对功能没有任何影响.
写得更清楚代码将是:
int a, b, c; a = 3; // 1 and 2 have no meaning whatsoever a++; a++; a++; b = a; b++; b++; c = b; b++;
增量前和增量后算子在行为方式上存在差异,导致b和c值的差异.