C ++ Struct被编译成类?

时间:2015-06-04 06:47:12

标签: c++ struct memory-layout

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

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

例如,我声明了struct:

WebView webview = (WebView) findViewById(R.id.wb);
         webview.getSettings().setJavaScriptEnabled(true); 
         String pdf = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf";
         webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdf);

结构的内存布局如下:

struct my_struct{
    int a;
};

这是否意味着C ++编译器认为struct与所有内容一样? (Expept to default access specifier)

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

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

非常感谢您的支持,

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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

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

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

  

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

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

答案 2 :(得分:1)

引自Stroustrup's FAQ

  

精心设计的类为其提供了一个简洁的界面   用户,隐藏其表示并保存其用户不必   了解这种表述。如果代表不应该   隐藏 - 比方说,因为用户应该能够更改任何数据成员   他们喜欢的任何方式 - 你可以把那个课程视为“只是一个普通的老人   数据结构“;例如:

struct Pair {
   string name, value; };

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

答案 3 :(得分:0)

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