自我的typedef会有什么影响吗?

Wil*_*mKF 6 c++ typedef self no-op

我遇到了一些具有以下内容的C++代码:

typedef Request Request;
Run Code Online (Sandbox Code Playgroud)

这只是一个无操作或者这种typedef实际有效果,如果有,它有什么影响?

Rob*_*obᵩ 9

您可以在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将类型重新定义为别名到别名