<分区>
Possible Duplicate:
Difference between ‘struct’ and ‘typedef struct’ in C++?
对 this question 的回答让我想知道以下内容:
我假设定义一个类如下:
typedef class {int i;} C;
将完全等同于以常规方式定义它:
class C
{
int i;
};
这个假设是否正确?
<分区>
Possible Duplicate:
Difference between ‘struct’ and ‘typedef struct’ in C++?
对 this question 的回答让我想知道以下内容:
我假设定义一个类如下:
typedef class {int i;} C;
将完全等同于以常规方式定义它:
class C
{
int i;
};
这个假设是否正确?
最佳答案
在这个孤立的例子中,它们在功能上是相同的,至少从外部来看是这样。
但是还是有区别的。特别是一个实例,您不能为以这种方式声明的 struct
或 class
声明构造函数,仅仅是因为 class
未命名。同样,您不能声明任何涉及类名的函数。以下是一些示例:
typedef class
{
public:
Gizmo() : n_(42) {}; // NOT OK
~Gizmo();
Gizmo& operator<<(int n);
private:
int n_;
} Gizmo;
你也不能转发声明一个匿名类:
class Gizmo;
在 C++ 中,我从未见过 typedef
匿名 struct
或 class
比简单声明 更可取的情况class
或命名的 struct
。在某些情况下,传统方法绝对是首选。这个故事的寓意是:不要在 C++ 中使用 typedef class {} Name;
。它不会给您带来任何好处,反而会让您付出一些代价。
关于c++ - 使用 typedef 和匿名类定义与传统类定义的等效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139235/