可能重复:
C++中的struct和class有什么区别
这个问题已经被问了很多,也得到了很多回答,但每隔一段时间我就会遇到一些令人困惑的事情。
总而言之,C++ 结构和类之间的区别在于著名的默认公共访问与私有访问。除此之外,C++ 编译器对待结构的方式与对待类的方式相同。结构可以有构造函数、复制构造函数、虚函数。等等。结构的内存布局与类的内存布局相同。C++ 具有结构的原因是为了与 C 向后兼容。
现在,由于人们对使用哪个结构或类感到困惑,因此经验法则是,如果您只有普通的旧数据,请使用结构。否则使用一个类。而且我已经读过结构在序列化方面很好,但不是从哪里来的。
然后前几天我看到了这篇文章: http: //www.codeproject.com/Articles/468882/Introduction-to-a-Cplusplus-low-level-object-model
它说如果我们有(直接引用):
struct SomeStruct
{
int field1;
char field2;
double field3;
bool field4;
};
那么这个:
void SomeFunction()
{
SomeStruct someStructVariable;
// usage of someStructVariable
...
}
还有这个:
void SomeFunction()
{
int field1;
char field2;
double field3;
bool field4;
// usage of 4 variables
...
}
是相同的。
它说如果我们有一个结构或者只是写下函数内部的变量,生成的机器代码是相同的。当然,这仅适用于您的结构是 POD 的情况。
这就是我感到困惑的地方。在 Effective C++ 中,Scott Meyers 说没有空类这样的东西。
如果我们有:
class EmptyClass { };
它实际上是由编译器布置的,例如:
class EmptyClass
{
EmptyClass() {}
~EmptyClass() {}
...
};
所以你不会有一个空的班级。
现在,如果我们将上述结构更改为一个类:
class SomeClass
{
int field1;
char field2
double field3;
bool field4;
};
这是否意味着:
void SomeFunction()
{
someClass someClassVariable;
// usage of someClassVariable
...
}
还有这个:
void SomeFunction()
{
int field1;
char field2
double field3;
bool field4;
// usage of 4 variables
...
}
在机器指令方面是否相同?没有调用 someClass 构造函数?或者分配的内存与实例化类或单独定义变量相同?那么填充呢?结构和类做填充。在这些情况下填充是否相同?
如果有人能对此有所了解,我将不胜感激。