【发布时间】:2012-10-14 13:16:41
【问题描述】:
在阅读过程中,我遇到了写于 1993 年(或者可能是 1893 年,他们离开了世纪和千年)的WG14 Defect Report #51。在那里的代码示例中,显然拼写为->> 的运算符用于指向struct 的指针。我在我找到的任何运算符优先级表中都找不到它,所以我想知道,它是否曾经是运算符,如果是,这个运算符是做什么的(或做了什么,视情况而定)?
起初我以为这是一个错字,但它在文本中又被复制了两次,在对问题的响应中又在代码示例中被复制了一次,我很难相信它只是滑过了至少两个 C专家不被注意,当它跳出来在像我这样的新手。它也是代码的焦点,很容易注意到,并且从未被纠正过。
这是添加了缩进的代码:
#include <stdlib.h>
struct A {
char x[1];
};
main()
{
struct A *p = (struct A *) malloc(sizeof(struct A) + 100);
p->>x[5] = '?'; /* This is the key line [for both them and us] */
return 0;
}
我尝试使用 C 和 C++ 编译器编译此代码,但在任一编译器中都无法解析。也许这是 C 早期版本中不再使用的某个运算符?
这感觉有点像What is the name of this operator: "-->"?的问题,但我不认为这是其他两个运算符的组合,我看不出它如何划分并有效。
【问题讨论】:
-
我有一种错字的感觉。
-
@SethCarnegie:我同意这很难相信,但我发现这比 1993 年 C 有一个
->>运算符更容易相信,因为它被历史学家迷失了。 Andrew Koenig 是一位不朽的人,他在 1893 年还活着并评论了 C 标准,介于两者之间。也许他有一个曾祖父? ;-) -
简单地说,这段代码是2093年写的,所以
operator->>还没有发明出来。 -
我们应该问this SO post的作者,因为他使用
->>:) -
“一旦你消除了不可能,剩下的无论多么不可能,都必须是事实。” ——阿瑟·柯南·道尔