首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++结构被编译成类?

C++结构被编译成类?
EN

Stack Overflow用户
提问于 2015-06-04 06:47:11
回答 4查看 568关注 0票数 1

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

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

例如,我声明了结构:

代码语言:javascript
复制
struct my_struct{
    int a;
};

结构的内存布局如下:

代码语言:javascript
复制
class my_struct size(4):
    +---
0   | a
    +---

这是否意味着C++编译器在任何情况下都认为结构与类相同?(扩展到默认访问说明符)

如果是这样的话,那么构造函数和结构体又如何呢?

是否存在结构的默认构造函数和解构函数?和班里很相似吗?

非常感谢你们的支持

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-04 06:56:46

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

代码语言:javascript
复制
class-specifier:
    class-head { member-specificationopt}

类头依次被定义为

代码语言:javascript
复制
class-head:
    class-key attribute-specifier-seqopt class-head-name class-virt-specifieropt base-clauseopt
    class-key attribute-specifier-seqopt base-clauseopt

哪里

代码语言:javascript
复制
class-key:
    class
    struct
    union

因此,结构是具有类键struct的类。

和(C++Standard 12.1构造函数)

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

因为结构是类并且没有用户声明的构造函数,所以编译器会隐式地声明这样的构造函数。

票数 1
EN

Stack Overflow用户

发布于 2015-06-04 06:49:48

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

票数 4
EN

Stack Overflow用户

发布于 2015-06-04 07:06:13

引用Stroustrup常见问题

一个设计良好的类为其用户提供了一个干净而简单的界面,它隐藏了它的表示,并避免了它的用户不必知道该表示形式。如果不应该隐藏表示(比如,因为用户应该能够以他们喜欢的任何方式更改任何数据成员),那么您可以将该类看作“--只是一个简单的旧数据结构”;例如:

代码语言:javascript
复制
struct Pair {
   string name, value; };

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30636825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档