为什么Right Associativity不适用于声明声明

时间:2010-08-22 17:30:20

标签: c

int a=b=c=10;  //invalid statement

但以下是有效的陈述

int a,b,c;
a=b=c=10;

第一个无效,因为b在b得到它的值之前被分配到偶数。

但第二种情况是有效的,因为等号(=)具有正确的联想,即 “=”符号将从右侧开始获得偏好。

我的问题是:为什么在第一种情况下不适用右关联? 这是否意味着Associativity不适用于声明声明? 我需要更加明确这一点。

3 个答案:

答案 0 :(得分:8)

它不起作用,因为它在语法上不正确。正如您在第二个示例中所示,使用逗号作为分隔符声明了多个类型的变量。如果已经声明了bc,那么事情就可以了。例如,这有效:

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)

需要首先声明变量,然后分配值或在表达式中使用。