在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 中描述。