我正在研究C++。我正在使用MVSV 2010。
当我编译源代码并使用-d1reportAllClassLayout转储所有类的内存布局时。
例如,我声明了结构:
struct my_struct{
int a;
};结构的内存布局如下:
class my_struct size(4):
+---
0 | a
+---这是否意味着C++编译器在任何情况下都认为结构与类相同?(扩展到默认访问说明符)
如果是这样的话,那么构造函数和结构体又如何呢?
是否存在结构的默认构造函数和解构函数?和班里很相似吗?
非常感谢你们的支持
发布于 2015-06-04 06:56:46
在C++中,类的概念定义如下
class-specifier:
class-head { member-specificationopt}类头依次被定义为
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++Standard 12.1构造函数)
4.类X的默认构造函数是类X的构造函数,可以在没有参数的情况下调用。如果类X没有用户声明的构造函数,则不包含参数的构造函数被隐式声明为默认的 (8.4)。隐式声明的默认构造函数是其类的内联公共成员.
因为结构是类并且没有用户声明的构造函数,所以编译器会隐式地声明这样的构造函数。
发布于 2015-06-04 06:49:48
在C++类中,和struct (几乎)完全相同。它们之间唯一的区别是类的缺省值是private,而结构的缺省值是public。
发布于 2015-06-04 07:06:13
引用Stroustrup常见问题
一个设计良好的类为其用户提供了一个干净而简单的界面,它隐藏了它的表示,并避免了它的用户不必知道该表示形式。如果不应该隐藏表示(比如,因为用户应该能够以他们喜欢的任何方式更改任何数据成员),那么您可以将该类看作“--只是一个简单的旧数据结构”;例如:
struct Pair {
string name, value; };结构是相似或不同数据类型的集合。类通过允许在结构中包含函数来扩展结构的范围。现在,如果一个结构只是一个数据类型的集合,那么您肯定可以像构造函数一样将它们初始化为一些默认值,否则编译器将隐式地为您做这件事,就像Vlad的答案中提到的那样,但是您不需要任何析构函数,默认情况下也没有析构函数。
https://stackoverflow.com/questions/30636825
复制相似问题