=(赋值)是右结合的例子
Example of = (assignment) being right-associative
=
赋值运算符的结合性对表达式有何影响?我认为结合性与共享一个运算符的操作数有关,但在赋值的情况下,它如何工作?一些(可能)相关的例子是:
x = 1
x + 2 = y + 3 = z + 5
这是否意味着,在上面的作业中,我们会:
y + 3 = z + 5
之前做过,例如:
x + 2 = y + 3
或者赋值关联性还有哪些其他场景'matters'?
你的例子没有证明任何东西,因为只有当你有几个具有相同优先级(或相同运算符)的运算符彼此相邻时,关联性才会发挥作用。
考虑 x = y = 42
,它将两个变量都设置为 42。
由于右结合性,它被解析为 x = (y = 42)
,其中 y = ...
return 是 y
的新值,即 42。
这就是它起作用的原因。如果 =
是左结合的并且它被解析为 (x = y) = 42
,那么:
- 在 C 中它根本无法编译,因为
x = ...
return 是右值而不是左值,并且不能将其分配给。
- 在 C++ 中,赋值 return 左值,它的工作方式类似于
x = y; x = 42;
,这远非直观。
=
赋值运算符的结合性对表达式有何影响?我认为结合性与共享一个运算符的操作数有关,但在赋值的情况下,它如何工作?一些(可能)相关的例子是:
x = 1
x + 2 = y + 3 = z + 5
这是否意味着,在上面的作业中,我们会:
y + 3 = z + 5
之前做过,例如:
x + 2 = y + 3
或者赋值关联性还有哪些其他场景'matters'?
你的例子没有证明任何东西,因为只有当你有几个具有相同优先级(或相同运算符)的运算符彼此相邻时,关联性才会发挥作用。
考虑 x = y = 42
,它将两个变量都设置为 42。
由于右结合性,它被解析为 x = (y = 42)
,其中 y = ...
return 是 y
的新值,即 42。
这就是它起作用的原因。如果 =
是左结合的并且它被解析为 (x = y) = 42
,那么:
- 在 C 中它根本无法编译,因为
x = ...
return 是右值而不是左值,并且不能将其分配给。 - 在 C++ 中,赋值 return 左值,它的工作方式类似于
x = y; x = 42;
,这远非直观。