duo*_*gja 5 c c++ typedef language-lawyer
我最近发现了C/C++的黑暗角落:typedef关键字不需要成为第一个单词就行了,并且知道下面所有看起来很奇怪 typedef的东西在C和C++中都是有效的,我感到很惊讶:
int typedef a;
short unsigned typedef b;
Run Code Online (Sandbox Code Playgroud)
以上typedefs相当于:
typedef int a;
typedef short unsigned b;
Run Code Online (Sandbox Code Playgroud)
并且,以下内容在C++中无效,但在C中有效:
typedef enum { c };
typedef;
typedef int;
typedef int short;
Run Code Online (Sandbox Code Playgroud)
语言设计师在C和C++中留下这个黑暗角落的原因是什么?
San*_*urg -2
也许它与修饰符的规则相同cv=修饰符适用:
就像cv修饰符(别名const volatile和mutable)一样,我猜typedef遵循相同的规则。
const 适用于它左边的内容。如果左侧没有任何内容,则它适用于右侧的内容。