int a=b=c=10; //invalid statement
但以下是有效的陈述
int a,b,c;
a=b=c=10;
第一个无效,因为b在b得到它的值之前被分配到偶数。
但第二种情况是有效的,因为等号(=)具有正确的联想,即 “=”符号将从右侧开始获得偏好。
我的问题是:为什么在第一种情况下不适用右关联? 这是否意味着Associativity不适用于声明声明? 我需要更加明确这一点。
答案 0 :(得分:8)
它不起作用,因为它在语法上不正确。正如您在第二个示例中所示,使用逗号作为分隔符声明了多个类型的变量。如果已经声明了b
和c
,那么事情就可以了。例如,这有效:
int b,c;
int a=b=c=10;
你甚至可以这样做(至少使用VS2010编译器):
int b,c,a=b=c=10;
请注意,我会说看起来不好,并建议反对。
答案 1 :(得分:4)
如果它不仅仅是一个练习,而是你用一个真正的编译器对它进行了测试,你可能会给我们更多的信息,实际上 会使编译器不满。
部分答案是注意=
运算符的两个不同角色。一个是赋值,一个是初始化。你的例子
int a = b = c = 10;
相当于
int a = (b = (c = 10));
所以右边的两个=
是赋值而不是初始化。在作业中,左手边必须明确定义。
答案 2 :(得分:0)
需要首先声明变量,然后分配值或在表达式中使用。