《Visual C++ 2012 开发权威指南》——2.3 Visual C++2012的语言新特性(3)-阿里云开发者社区

开发者社区> 异步社区> 正文

《Visual C++ 2012 开发权威指南》——2.3 Visual C++2012的语言新特性(3)

简介:
+关注继续查看

本节书摘来自异步社区出版社《Visual C++ 2012 开发权威指南》一书中的第2章,第2.3节,作者: 尹成 , 朱景尧 , 孙明龙 , 胡耀文,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 Visual C++2012的语言新特性(3)

在VC12(Visual C++2012),我们打算完全支持C++11标准库,但实施编译器功能可以自定义(另外,VC12不会完全实现C99标准库,已经通过引用纳入C++11标准库。注意本页和VC12已经有)。这里是我们不断的变化的非详尽列表:

新头文件:、、、、、、和。

进驻:根据需要由C++11,我们已经实现了emplace()/emplacefront()/emplace_back()/ emplace hint()/emplace_after()在所有容器的"任意"数字的参数(见下文)。例如,矢量有"模板< typename…Args > 无效emplace_back(Args & & …args)"的直接构造任意数量的任意参数,完美转发从向量的背部T类型的元素。这可以更有效地比push_back(T&&)(本页支持1的参数,并不是特别有用的侵位)。

人造variadics:我们开发了一种新的模拟variadic模板方案。以前在VC9 SP1和页本页,我们一再包括subheaders在定义不同的每一次,为了杜绝为0、1、2、3,等参数的重载的宏(例如, 包含内部subheader 反复,为了杜绝make_shared (args,args,args))。在VC12,subheaders已经过去了。现在我们variadic模板本身定义为宏(带有大量的反斜杠延续),然后将其展开主宏。此内部实现更改具有某些用户可见的影响。首先,代码是更容易维护,更易于使用(添加subheaders相当多的工作),并略小于偶尔无法读取。这是什么让我们轻松实现variadic进驻,应该更容易在将来壁球bug。第二,很难走进调试器的情况(抱歉!)。第三,(piecewise_construct_t,元组 < … …Args1 > < Args2… …>的元组)对构造函数“有趣”的效果。这就要求N ^2重载(如果我们支持多达10元组,这意味着121重载,因为空元组计数在这里太大)。最初,我们发现这(滥发出这么多对元组重载,再加上所有的重载,这些重载进驻)消耗了大量的内存。在编译期间,作为一种解决方法,我们减少了无穷。在VC9 SP1和页本页,无限是10(即“variadic”模板支持具有包容性的0到10节参数)。在VC12的开发者预览中,无限是默认情况下的5。这得回页本页是什么我们编译器内存消耗。如果需要更多的参数(例如有代码编译VC9 SP1或页本页使用6元组),可以定义_VARIADIC_MAX 5至10包容性(默认为5)项目范围。增加它将使编译器会消耗更多的内存。

随机性:uniform_int_distribution现在是完全不带偏见,和我们已经实现了shuffle(), ,它直接接受像mersenne_twister的均匀随机数发生器。

抗运算符重载的地址:C++98/03禁止其地址的运算符重载的STL容器元素。这是像CComPtr类做些什么,所以像CAdapt的帮助器类都必须屏蔽STL从这种重载。页本页的发展过程中,所做的STL的更改同时大规模重写(对于rvalue引用,除其他外),STL重载地址的运算符在某些情况下甚至更多。

然而C++12改变其需求,使运算符重载的地址可以接受(C++11和页本页,提供帮助器函数std::addressof(),这是能够获得真实地址的运算符重载对象)。页本页发送之前,我们试图审核所有STL容器中的事件“和元素”,代之以“std::addressof(elem)”这是适当的抗性。在VC12,我们已经进一步发展。现在我们已经审计所有容器和所有的迭代器,所以重载其地址的运算符的类应该是整个STL可用。任何剩余的问题都应通过Microsoft连接向我们报告的错误。(可以想象,grepping为“及元素”相当难!)还没审核算法,但偶然一瞥向我表示他们并不特别喜欢的元素的地址。还将超越C++12的几种方式:

令人容易失误的迭代器:但不是允许所需的C++11标准,已实施避免易失误的迭代器,所形容的“最小化依赖项内泛型类的快和小程序‘N2911和N2980’易失误的迭代器分配和初始化,修订1”。

文件系统:已经添加头TR2的建议,如recursive_directory_iterator。来自Boost.Filesystem V2。它后来演变成Boost.Filesystem V3,但这都不会实现的VC12。

最后,在众多的错误修正,我们开展了主要的优化!所有我们的容器(一般说来)现最佳小给予其当前的表示形式。这指容器对象本身,不其指向胆量。例如,矢量包含三个原始指针。页本页,向量x 86发布模式,是16个字节。在VC12,它是12个字节,这是最佳小。如果在程序中有100,000的载体 —VC12将为节省400KB,这是一个大问题。降低的内存使用节省了时间和空间。

这里是所有x86和x 64的大小。(32位ARM是相当于x 86为这些目的)。当然,这些表包括发布模式下,调试模式包含所消耗的时间和空间的机械检查。在VC9 SP1中,_SECURE_SCL默认为1,而对于VC9 SP1中的_SECURE_SCL手动设置为0,最大速度为单独的列。默认为0(现名为_ITERATOR_DEBUG_LEVEL的_SECURE_SCL本页和VC12)。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《JavaScript开发框架权威指南》——导读
JavaScript社区中正在迈开近乎狂热的创新步伐,虽然充满了无穷的魅力,但也提出了自己的独特的挑战。JavaScript的生态系统包括库、框架以及工具,都在剧烈地成长。过去针对任何给定问题可能只有少量的解决方案,而今已经有许多解决方案可以选择,并且其数目日益增长。
1780 0
《VMware Virtual SAN权威指南(原书第2版)》一3.5 可能发生的网络配置问题
本节书摘来自华章出版社《VMware Virtual SAN权威指南(原书第2版)》一 书中的第3章,第3.5节,作者:[美] 科马克·霍根,邓肯·埃平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2276 0
降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)
作者 | 陈洁(墨封)  阿里云开发工程师 导读:etcd 作为 K8s 集群中的存储组件,读写性能方面会受到很多压力,而 etcd 3.4 中的新特性将有效缓解压力,本文将从 etcd 数据读写机制的发展历史着手,深入解读 etcd 3.4 新特性。
1396 0
《JavaScript开发框架权威指南》——2.7 小结
本节书摘来自异步社区《JavaScript开发框架权威指南》一书中的第2章,第2.7节,作者:【美】Tim Ambler , Nicholas Cloud著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1403 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载