gpt4 book ai didi

C++:结构真的和类一样吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:05 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
What are the differences between struct and class in C++

这个问题已经被问了很多,也回答了很多,但每隔一段时间我就会遇到一些令人困惑的事情。

总而言之,C++ 结构和类之间的区别在于著名的默认公共(public)访问与私有(private)访问。除此之外,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 构造函数?或者分配的内存与实例化类或单独定义变量相同?填充呢?结构和类进行填充。在这些情况下填充是否相同?

如果有人能阐明这一点,我将不胜感激。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com