【发布时间】:2011-11-16 11:05:00
【问题描述】:
我可以理解为什么赋值运算符是右结合的。当
x = 4 + 3
被评估,即在分配给 x 之前添加 4 和 3。
我不清楚?: 将如何从正确的联想中受益。只有当两个?:s 像这样使用时才重要吗
z = (a == b ? a : b ? c : d);
然后它是这样评估的:
z = (a == b ? a : (b ? c : d));
从左到右进行评估肯定更有意义吗?
【问题讨论】:
-
在
x = 4 + 3中,对求值顺序的唯一限制是任何运算符的操作数必须在运算符本身被应用之前求值。=和+都没有对其操作数的求值施加任何排序。对于x = 4 + 3,左操作数x和右操作数4 + 3都必须在赋值发生之前进行求值,但这可以按任意顺序进行。请注意,评估左操作数x是指确定要分配的对象。在更复杂的示例arr[func1()] = func2();中,可以按任意顺序调用这两个函数。 -
是的,我想我在那里不清楚/不正确。正确的联想意味着你可以做 x = y = 4;和 4 将正确分配给 y 和 x
-
只是为了完整性:如果分配保留关联
x = y = 4将失败。首先,y 将被分配给 x 并“返回”一个具有 y 值的右值。然后将这个右值分配给 4,这是非法的。 -
php 保持关联,并导致各种问题。 phpsadness.com/sad/30