在comp.lang.c++.moderated
上阅读C ++ / STL 的 Hidden Features 和 Dark Corners 后 ,我完全惊讶于以下代码片段在 Visual Studio 2008 和 G ++ 4.4 中编译和工作。
这是代码:
#include <stdio.h>
int main()
{
int x = 10;
while (x --> 0) // x goes to 0
{
printf("%d ", x);
}
}
我假设这是 C,因为它也适用于 GCC。标准中定义了哪里,它来自何处?
请注意
-->
不是运营商。它实际上是两个独立的运算符,--
和>
。
条件的代码递减x
,同时返回x
的原始(未递减)值,然后使用>
运算符将原始值与0
进行比较。
为了更好地理解,该声明可以写成如下:
while((x--) > 0)
或者对于完全不同的东西... x 幻灯片到 0
while (x --\
\
\
\
> 0)
printf("%d ", x);
不是那么数学,但...... 每张图片都描绘了千言万语。 ...
这是一个非常复杂的操作员,因此即使ISO / IEC JTC1(联合技术委员会 1)也将其描述放在 C ++ 标准的两个不同部分。
开玩笑说,它们是两个不同的运算符: --
和>
分别在 C ++ 03 标准的 §5.2.6/ 2 和 §5.9 中描述。