首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >默认构造函数是否初始化内置类型?

默认构造函数是否初始化内置类型?
EN

Stack Overflow用户
提问于 2010-03-10 21:08:56
回答 5查看 88.5K关注 0票数 187

默认构造函数(由编译器创建)会初始化内置类型吗?

EN

回答 5

Stack Overflow用户

发布于 2010-03-10 23:29:58

我不太确定你的意思,但是:

struct A { int x; };

int a; // a is initialized to 0
A b;   // b.x is initialized to 0

int main() {
    int c;         // c is not initialized
    int d = int(); // d is initialized to 0

    A e;           // e.x is not initialized
    A f = A();     // f.x is initialized to 0
}

在我说“未初始化”的每一种情况下,你可能会发现你的编译器给了它一个一致的值,但标准并不要求它。

很多人挥舞着手,包括我在内,关于内置类型“实际上”是如何拥有默认构造函数的。实际上,缺省初始化和值初始化是标准中定义的术语,我个人每次都要查阅这些术语。只有在标准中定义的类才具有隐式的默认构造函数。

票数 22
EN

Stack Overflow用户

发布于 2010-03-10 21:10:03

根据标准,除非您在初始化器列表中显式初始化,否则它不会

票数 3
EN

Stack Overflow用户

发布于 2010-03-10 21:37:47

正如前面的发言者所说的那样-不,它们没有初始化。

这实际上是一个非常奇怪的错误的来源,因为现代操作系统倾向于用零填充新分配的内存区域。如果你希望如此,它可能会在第一次工作。然而,随着您的应用程序继续运行,delete-ing和new-ing对象,您迟早会遇到这样一种情况:您期望的是零,但是来自较早的对象的非零的剩余物存在。

那么,为什么不是所有的new-ed数据都是新分配的?是的,但并不总是来自操作系统。操作系统倾向于使用更大的内存块(例如,一次4MB ),因此所有微小的一个字这里三个字节的分配和释放都是在uyserspace中处理的,因此不会被清零。

PS。我写的是“倾向于”,也就是说你甚至不能指望第一次成功……

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

https://stackoverflow.com/questions/2417065

复制
相关文章

相似问题

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