1

我正在研究 C++。我正在使用 MVSV 2010。

当我编译源代码并使用 -d1reportAllClassLayout 转储所有类的内存布局时。

例如,我声明结构:

struct my_struct{
    int a;
};

struct的内存布局如下:

class my_struct size(4):
    +---
0   | a
    +---

这是否意味着 C++ 编译器在所有方面都认为 struct 与 class 相同?(除了默认访问说明符)

如果是这样,那么struct的构造函数和解构函数呢?

结构是否有默认构造函数和解构函数?它类似于Class?

非常感谢您的支持,

4

4 回答 4

4

在 C++ 中,类和结构(几乎)完全相同。它们之间唯一的区别是classprivate的默认值是,struct的默认值是public

于 2015-06-04T06:49:48.900 回答
1

在 C++ 中,类的概念定义如下

class-specifier:
    class-head { member-specificationopt}

其中 class-head 依次定义为

class-head:
    class-key attribute-specifier-seqopt class-head-name class-virt-specifieropt base-clauseopt
    class-key attribute-specifier-seqopt base-clauseopt

在哪里

class-key:
    class
    struct
    union

因此,结构是带有 class-key 的类struct

和(C++ 标准 12.1 构造函数)

4 类 X 的默认构造函数是类 X 的构造函数,可以在没有参数的情况下调用。如果类 X 没有用户声明的构造函数,则没有参数的构造函数被隐式声明为默认(8.4)。隐式声明的默认构造函数是其类的内联公共成员...

由于结构是类并且没有用户声明的构造函数,因此编译器隐式声明了这样的构造函数。

于 2015-06-04T06:56:46.553 回答
1

引用Stroustrup 的常见问题解答

一个设计良好的类向它的用户展示了一个干净简单的界面,隐藏了它的表示并让它的用户不必知道那个表示。如果不应该隐藏表示 - 比如说,因为用户应该能够以任何他们喜欢的方式更改任何数据成员 - 你可以将该类视为“只是一个普通的旧数据结构”;例如:

struct Pair {
   string name, value; };

结构是相似或不同数据类型的集合。类通过允许在结构中包含函数来扩展结构的范围。现在,如果一个结构只是数据类型的集合,您当然可以将它们初始化为一些默认值,就像构造函数一样,否则编译器会隐含地为您执行它,如 Vlad 的回答中提到的,但您不需要任何析构函数和默认情况下没有析构函数。

于 2015-06-04T07:06:13.323 回答
0

这可能只是意味着 d1reportAllClassLayout 报告它们都是相同的

于 2015-06-04T06:57:25.180 回答