17

为什么使用typedef class {} Name?

我在IBM C++ doc中学到了这一点,这里没有使用提示。

4

2 回答 2

31

这是“C”语言的后遗症。

在 C 中,如果你有

struct Pt { int x; int y; };

然后要声明这个结构的变量,你需要做

struct Pt p;

typedef 帮助您在 C 中避免这种情况

typedef struct { int x; int y; } Pt;

现在你可以做

Pt p;

在 C.

在 C++ 中,这从来没有必要,因为

class Pt { int x; int y; };

允许你做

Pt p;

它在 C++ 中没有像在 C 中那样提供符号上的好处。OTOH,它会导致限制,因为这种语法不提供任何构造或破坏机制。

即您不能在构造函数或析构函数中使用名称 typedef 名称。

typedef class { int x; int y; } Pt;

你不能有一个叫做 Pt 的构造函数,也不能有一个析构函数。所以本质上,大多数时候,你不应该在 C++ 中这样做。

于 2013-03-19T14:07:18.827 回答
3

这个答案假设课堂上有一些有趣的内容,而不仅仅是{}.

在 C++ 中,您可以拥有与类同名的函数(为了与 C 兼容),但您几乎不想这样做。

您不能拥有与 typedef 同名的函数,因此这样做可以保护您免受不规范的名称选择。几乎没有人打扰,即使你要打扰你也可能会写:

class Name {};
typedef Name Name; // reserve the name

如果你所指的代码真的是写的(我不能通过你的链接看到它),那么它就像class Name {};(这是一个奇怪的东西,你为什么要调用一个空类Name?),但是修改了出于上述考虑。

于 2013-03-19T14:07:01.120 回答