可能重复:
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 构造函数?或者分配的内存与实例化类或单独定义变量相同?那么填充呢?结构和类做填充。在这些情况下填充是否相同?
如果有人能对此有所了解,我将不胜感激。