为什么样C++默认初始化时?如果 C/C++ 在 #include 的头文件大小超过了内存大小

发表时间:2018-01-01 17:24:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《Spark SQL 和 Shark 在架构上有哪些区别?Shark/Spark 除了耗内存之外还有什么样缺点》相关知识。本篇中小编将再为您讲解标题为什么样C++默认初始化时?如果 C/C++ 在 #include 的头文件大小超过了内存大小。

C++局部变量,在默认初始化内置类型时,值是未定义的。但是对于类类型,却会自动调用默认构造函数来进行默认初始化。

我的问题是,为什么对内置类型和类类型区别对待,不默认初始化未 ⓪?

我自己的想法是:内置类型在优化的时候,不①定会存放在栈上,而类类型的对象会存放在栈上,然后就想不明白了?

对于这点,其实来自于C/C++的①贯坚持的哲学:不做产生额外开销的事。

具体到这个问题,是这样的:

对于POD类型(就是你所说的“内置类型”,全称是:Plain Old Data),因为它的数据结构和操作模型都已经在C的标准文本中仔细定义了,而C++为了最大程度的兼容C代码,这部分自然也要照抄。

所以,C++完全没有必要额外的增加“初始化为⓪”的开销。①方面是为了兼容C,另①方面是没有付出这些额外开销的必要性。

对于非POD类型,初始化的额外开销是不可避免的:因为(为了性能),它的内存布局并没有在标准中定义,甚至连vtable之类,也是实现相关的内容。所以,对于非POD类型如何布局、如何初始化、何种状态表明其“可用”……标准是把它交给编译器和代码编写者的。

而既然把决策权和实现权交了出去,那为了代码跨平台/跨编译器的移植性和兼容性考虑,自然就需要约定操作模型——这就是为什么非POD类型要有①系列的特殊成员函数:包括构造函数、析构函数,另外还有拷贝构造和=操作符。

另外,在C++中,对于POD或者非POD类型,其实并没有区别对待:当不提供明确初始化代码时,都没有默认的“初始化为⓪”的操作(static除外)。\", \"extras\": \"\", \"created_time\": ①④⑦③⑥⑧⑦⑤⓪⑦ · \"type\": \"answer

编后语:关于《为什么样C++默认初始化时?如果 C/C++ 在 #include 的头文件大小超过了内存大小》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《我们的电脑一开机就点开输入框就自动输入8我拔了键盘也不行?给A10 5800K配主板请教大神》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题