Wil*_*mKF 6 c++ typedef self no-op
我遇到了一些具有以下内容的C++代码:
typedef Request Request;
Run Code Online (Sandbox Code Playgroud)
这只是一个无操作或者这种typedef实际有效果,如果有,它有什么影响?
您可以在7.1.3节中阅读与C++ 2003 ANSI ISO IEC 14882 2003的typedef说明符相关的所有规则.在7.1.3中,2)已经说过,如果名称已经引用了某种类型,则允许使用identity typedef.
这是合法的:
typedef int Request;
typedef Request Request; // Redefines "Request" with no effect
Run Code Online (Sandbox Code Playgroud)
而事实并非如此:
typedef Request Request; // Illegal, first "Request" doesn't name a type.
Run Code Online (Sandbox Code Playgroud)
该标准有一个与此相关的具体例子.C++ 2003,§7.1.3/ 2:
在给定的非类作用域中,可以使用typedef说明符重新定义该作用域中声明的任何类型的名称,以引用它已引用的类型.[ 例如:
typedef struct s { /* ... */ } s;
typedef int I;
typedef int I;
typedef I I;
Run Code Online (Sandbox Code Playgroud)
- 结束例子 ]
在7.1.3中,3)已经说过禁止使用typedef将类型重新定义为别名到别名