为什么存在 x++ 和 ++x,并且 x += 2 而不是 x =+ 2?
Why does x++ and ++x exist, and x += 2 but not x =+ 2?
在 C++(以及其他编程语言)中,(x++)
将 x 计算为令牌,然后将 x 递增 1,而 (++x)
首先将 x 递增,然后将 x 的新值计算为令牌。
类似地,(x += 2)
存在(将 x 计算为标记,然后将 x 递增 2)。然而,(x =+ 2)
并没有归结为将 x 递增 2 然后将 x 的新值评估为标记,而是评估为 x = +2
.
为了区分 x =+ 2
和 x = +2
,适当的间距是必要的,但我不明白为什么会有问题。
为什么(x =+ 2)
没有设计成执行两个前置自增的功能?
编辑:这样做的目的不是为了看起来漂亮,而是为了方便一些可能出现循环的情况。
我记得 K&R 书(至少是第一版,我现在手边没有)说 =+
最初打算成为 C 中的运算符,但它含糊不清解析。所以选择了+=
。在空格通常不重要的语言中,要求空格消除歧义并不是非常友好。
这是因为人们很容易将 x=+2 解释为 x= positive 2。
Why is (x =+ 2)
not designed to perform the function of two (++x)
expressions?
因为 C++ 中的空格并不重要(模数分隔关键字,如 class
)。如果这两个语句的含义截然不同,那将是语言的一个非常明显的突破:
x =+ 2;
x = +2;
让我们不要把C++变成Python。
在 C++(以及其他编程语言)中,(x++)
将 x 计算为令牌,然后将 x 递增 1,而 (++x)
首先将 x 递增,然后将 x 的新值计算为令牌。
类似地,(x += 2)
存在(将 x 计算为标记,然后将 x 递增 2)。然而,(x =+ 2)
并没有归结为将 x 递增 2 然后将 x 的新值评估为标记,而是评估为 x = +2
.
为了区分 x =+ 2
和 x = +2
,适当的间距是必要的,但我不明白为什么会有问题。
为什么(x =+ 2)
没有设计成执行两个前置自增的功能?
编辑:这样做的目的不是为了看起来漂亮,而是为了方便一些可能出现循环的情况。
我记得 K&R 书(至少是第一版,我现在手边没有)说 =+
最初打算成为 C 中的运算符,但它含糊不清解析。所以选择了+=
。在空格通常不重要的语言中,要求空格消除歧义并不是非常友好。
这是因为人们很容易将 x=+2 解释为 x= positive 2。
Why is
(x =+ 2)
not designed to perform the function of two(++x)
expressions?
因为 C++ 中的空格并不重要(模数分隔关键字,如 class
)。如果这两个语句的含义截然不同,那将是语言的一个非常明显的突破:
x =+ 2;
x = +2;
让我们不要把C++变成Python。