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

时间:2012-05-24 15:52:05

标签: c++ typedef self noop

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

typedef Request Request;

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

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

如果 Request仅作为参数传递,则似乎是opaque pointer
应该有一个

typedef struct Request Request 

代码中的某个地方。 (见你对问题的评论)
这用于定义API并隐藏实现细节。因此,您可以稍后更改实施,而无需再次更改API。

客户不需要了解关于实际类型的任何信息 - 它只是一种句柄 你想用它做的一切都必须用api方法完成(创建,删除,加载,初始化......) 通常句柄Request将被转换为在api的实现中更有意义的东西。这通常是在 C中完成的。