题目:
8. 下面的语句是否有效?如果无效,原因是什么?如果有效,它将完成什么工作?

int x=(1,024);

下面的语句又如何呢?

int y;     
            
			 y = 1,024;

答案: 

当然,第一条语句是有效的。表达式1,024由两个表达式组成--1和024,用逗号运算符连接。值为右侧表达式的值。这是024,八进制为20【书上此处是错误的】,因此该声明将值20赋给x。第二条语句也是有效的。然而,运算符优先级将导致它被判定成这样:

(y = 1), 024;

也就是说,左侧表达式将y设置成1,整个表达式的值(没有使用)为024或20(八进制)【书上此处有错误】。


C++技术网辅导详解解答:
    八进制的数字,前缀为0。十六进制的数字,前缀为0x。十进制数字无前缀。所以我们这里看到的024是八进制的24,对应十进制的20。上述书上的答案是有错误的,这里勘误一下!!
    因为逗号是连接运算符,却确保逗号连接的每一个表达式都执行,但是只有逗号最右边的一个表达式的值才会返回。所以x被赋值为024,即十进制的20。括号只是一个表示优先级的一个作用。
    那么在没有括号的情况下,那么逗号分隔的每一部分就成为独立的表达式,所以y=1和024就成为了两个独立的表达式,就不是前面一样的赋值的作用了。最后y的值还是1。x的值是20。这也是括号带来的区别。