首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >默认构造函数C++

默认构造函数C++
EN

Stack Overflow用户
提问于 2011-05-10 04:48:48
回答 4查看 1.6K关注 0票数 5

假设我有这样一个类:

代码语言:javascript
运行
复制
class X {
public:
    int x;
};

我看到,如果我在本地创建X的一个实例,只有在全局创建的情况下,x才不会被初始化为0。

这是否意味着编译器没有为本地创建的对象合成默认构造函数(我怀疑它),或者它将被合成但不会将x值清零,如果是这样,为什么会这样呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-10 04:50:46

C++中的构造函数通常不会将成员初始化为0。您必须显式地使用值初始化成员。

在全局情况下,内存为零的原因是因为静态内存在发生任何其他事情之前被初始化为零。在您的例子中,隐式生成的默认构造函数在之后被调用,它不会触及成员X的内存。

另请参阅德里克的回答:Is global memory initialized in C++?

但是,请注意,结构化的非POD成员(类和结构)的默认构造函数确实会自动由默认构造函数调用。默认情况下,它只保留POD成员。

票数 4
EN

Stack Overflow用户

发布于 2011-05-10 05:53:18

X获得一个合成的构造函数,但是合成的构造函数不会对原语进行零初始化。

票数 2
EN

Stack Overflow用户

发布于 2011-05-10 04:56:48

您正在将对象构造的概念与成员初始化结合起来。一般来说,不要期望C++为您初始化原始数据成员,您需要自己完成(最好是通过构造函数后面的初始化列表)。

这主要是为了提高速度,因为这允许在不进行初始化的情况下进行分配,例如,如果您稍后要计算数据成员的值并覆盖任何“默认值”,这将非常有用。

我发现这个网站在过去是一个很有用的参考:http://www.cplusplus.com/doc/tutorial/variables/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5942328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档