typedef和非简单类型说明符

Pra*_*rav 18 c c++ language-lawyer

为什么这段代码无效?

typedef int INT;
unsigned INT a=6;
Run Code Online (Sandbox Code Playgroud)

而以下代码有效

typedef int INT;
static INT a=1; 
Run Code Online (Sandbox Code Playgroud)

根据我的理解unsigned int不是一个"simple type specifier",所以代码是不正确的.我不确定.

任何人都可以指向Standard使第一个代码无效(和第二个代码有效)的相关部分?

编辑

虽然Johannes Schaub的答案似乎是正确的并且到了重点(他已经删除了他的答案BTW)但我接受了James Curran的答案,因为它的正确性和准确性.

Jam*_*ran 29

typedefs不像宏.它们不仅仅是文本替换.Typedef创建一个新的类型名称.

现在,当你说unsigned int,这unsigned不是一个修改者,它被添加到了int.unsigned int是完整的类型名称; 它碰巧有一个空间.

所以,当你说typedef int INT; 那时INT是完整的类型名称.它无法修改.

static(like const)是一个存储类说明符.它实际上不是类型名称的一部分.


Sch*_*ron 12

  • 7.1.1:static是存储类说明符.它可以放在任何类型之前.
  • 7.1.5:什么是类型说明符(unsigned可以与char,long,short或int结合使用)

  • `unsigned`也可以是一个单独的类型. (3认同)