老熟悉的人:

typedef int cute_int; //cute : common and familiar syntax. 

这个语法是完美的。没问题。

现在,当我们可以像上面一样编写Typedefs时,那么允许此语法的意义是什么:

int typedef crazy_int; //crazy : uncommon and unfamiliar syntax.

只是为了混淆程序员吗?这个语法甚至在任何地方都需要(实际上我们有前一个语法)吗?您从编译器的角度看待什么?他们觉得它可爱还是疯狂?还是对编译器根本没有关系?


顺便说一句,此代码来自这里:使用TypeDEF和New的TypeName关键字

如果您想知道这是否是语法错误,请查看 这里的工作代码 在Ideone。

其他提示

问题是“为什么让您感到困惑?”

该语法来自C ++的声明说明符的语法,该语法非常通用,用于C ++中的许多内容。声明说明符的顺序无关紧要。看看这些:

int virtual f() const, *g(int);
int ptr1, *ptr2;
int typedef const *name1, name2;

这些等同于:

virtual int f() const;
virtual int* g(int);
int ptr1;
int *ptr2;
typedef const int* name1;
typedef const int name2;

如果您看足够长的时间,您会发现该语法实际上是统一且合乎逻辑的。还可以阅读C ++的语法可能会有所帮助。

我不知道这种语法,尽管我的G ++似乎接受了...但是从编译器的角度来看,它使解析更加困难:当您遇到一个 int 令牌,您不知道您是否正在解析类型的定义(并且 typedef 即将发生)或您正在解析变量/函数定义...

拥有的唯一意义 A typedef B 是如果您考虑 typedef 成为二进制操作员(从某种意义上说 A = B).

我不确定Standart是否允许使用这种情况。但是,众所周知,C ++中有很多东西允许但具有无关的语法。例如这种事情 1[a], "hello"[2];// ...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top