c++结构被编译成类

C++ Struct is compiled into class?

本文关键字:编译 结构 c++      更新时间:2023-10-16

我正在学习c++。我用的是MVSV 2010。

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

例如,我声明struct:

struct my_struct{
    int a;
};

和struct的内存布局如下:

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

这是否意味着c++编译器在所有方面都认为结构与类相同?(默认访问说明符除外)

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

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

非常感谢你的支持

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

在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

结构为类键为struct的类。

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

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

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

引用自Stroustrup的FAQ

一个设计良好的类给它的对象提供了一个干净简单的接口用户,隐藏它的表示,并节省了它的用户不得不了解那个代表。如果表示不应该隐藏——比如说,因为用户应该能够更改任何数据成员任何他们喜欢的方式-您可以将该类视为"只是一个普通的旧的数据结构";例如:

struct Pair {
   string name, value; };

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

它可以简单地表示d1reportAllClassLayout报告它们都是相同的