在上一篇文章中,小编为您详细介绍了关于《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配主板请教大神》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器