协慌网

登录 贡献 社区

C ++ 中的 “->” 运算符是什么?

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