对自我的 typedef 是否有任何影响

Does a typedef to self have any effect?

本文关键字:任何 影响 是否 typedef 自我 我的      更新时间:2023-10-16

我遇到了一些C++代码,其中包含以下内容:

typedef Request Request;

这只是一个无操作还是这个 typedef 实际上有效果,如果是这样,它有什么效果?

您可以在第 7.1.3 节中阅读与 C++2003 ANSI ISO IEC 14882 2003 的 typedef 说明符相关的所有规则。在 7.1.3, 2) 中,有人说如果名称已经引用了某种类型,则允许使用标识 typedef

这是合法的:

typedef int Request;
typedef Request Request; // Redefines "Request" with no effect 

而且它不是:

typedef Request Request; // Illegal, first "Request" doesn't name a type. 

该标准有一个与此相关的具体示例。C++2003, §7.1.3/2:

在给定的非类作用域中,typedef 说明符可用于重新定义 中声明的任何类型的名称 该范围引用它已引用的类型。[示例

typedef struct s { /* ... */ } s;
typedef int I;
typedef int I;
typedef I I;

结束示例]

在 7.1.3, 3) 中,有人说禁止使用 typedef 将类型重定义为别名到另一种类型

如果Request仅作为参数传递,则它似乎是一个不透明的指针。
应该有一个

typedef struct Request Request 

在代码中的某个地方。(请参阅对您的问题的评论)
这用于定义 API 和隐藏实现详细信息。因此,您可以稍后更改实现,而无需再次更改 API。

客户不需要知道任何关于针尖类型的信息 - 它只是一个手柄。
你想用它做的所有事情都必须通过 api 方法完成(创建、删除、加载、初始化......
通常,句柄Request将在 API 的实现中转换为更有意义的内容。这通常是在 C 中完成的。