c++结构被编译成类
C++ Struct is compiled into class?
我正在学习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报告它们都是相同的
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- C++编译大型结构时内存使用过多
- 如何在 C++11 编译时构建具有递增值的整数成员的结构序列
- C 嵌套结构上的 g++ 编译错误
- 无法在窗口上编译结构 - 缺少 ltdl.h
- 编译时检查以确保结构中的任何位置都没有填充
- Rcpp - 在包结构之外编译
- 当编译时已知引用占用结构中的空间时,是否错过了优化?
- 尝试初始化结构向量时出现编译错误
- ARM C++编译器不会编译具有可变常量成员的结构
- Jetson 工具链文件夹结构和交叉编译时的 libgomp 链接器错误
- std::结构复杂,使编译速度变慢
- 为什么我无法编译结构化绑定?
- 如何修复编译由结构组成的 std::p air 时出现的错误
- NVCC编译了特征库,并在运行时失败的结构中的MatrixxD大小
- 使用std :: map时,包含unique_ptr的结构中的默认破坏者会导致编译错误
- C++代码只能针对特定的 CPU 体系结构进行编译.有没有办法将其编译为所有架构
- 编译结构的时枚举映射
- 使用emscripten编译结构时出错