c++ - 使用 typedef 和匿名类定义与传统类定义的等效性

标签 c++ typedef anonymous-class

<分区>

Possible Duplicate:
Difference between ‘struct’ and ‘typedef struct’ in C++?

this question 的回答让我想知道以下内容:

我假设定义一个类如下:

typedef class {int i;} C;

将完全等同于以常规方式定义它:

class C
{
   int i;
};

这个假设是否正确?

最佳答案

在这个孤立的例子中,它们在功能上是相同的,至少从外部来看是这样。

但是还是有区别的。特别是一个实例,您不能为以这种方式声明的 structclass 声明构造函数,仅仅是因为 class 未命名。同样,您不能声明任何涉及类名的函数。以下是一些示例:

typedef class
{
public:
  Gizmo() : n_(42) {}; // NOT OK
  ~Gizmo();
  Gizmo& operator<<(int n);    
private:
  int n_;
} Gizmo;

你也不能转发声明一个匿名类:

class Gizmo;

在 C++ 中,我从未见过 typedef 匿名 structclass 比简单声明 更可取的情况class 或命名的 struct。在某些情况下,传统方法绝对是首选。这个故事的寓意是:不要在 C++ 中使用 typedef class {} Name;。它不会给您带来任何好处,反而会让您付出一些代价。

关于c++ - 使用 typedef 和匿名类定义与传统类定义的等效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139235/

相关文章:

c++ - 将函数作为参数传递时出现错误 LNK2019 "unresolved external symbol"

c - 如何在 C 中使用前向声明?

java - Class$S7119 在 GWT 中代表什么?

php - PHP 7 中的匿名类

c++ - 将动态创建的数组作为参数传递

c++ - C++ 中集合/容器的接口(interface)/父类(super class)

c++ - 为什么我在间接使用基类 typedef 时总是出现语法错误,而直接使用它没问题?

c++ - 3d 数组声明导致段错误

c++ - 我如何优化 QCompleter 的性能?

Android/Kotlin : Why is the lambda syntax different for . setOnClickListener() 和 .observe()?