查看官网https://msdn.microsoft.com/library/
从VisualStudio2010讲起,主要是针对c++11特性来研究vs开发c++的IDE的强大之处
VisualStudio2010下载release(发布版本)地址:https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2010-version-history
由上文https://blog.csdn.net/u012198575/article/details/83112915《C++——发展历史》可知
新的c++标准(c++11)是2011年年中发布的
而VisualStudio2010是2010年4月12日发布的是用原先的c++0x特性,这里不做过多介绍
继VisualStudio2010后的版本VisualStudio2012
查看官网介绍https://msdn.microsoft.com/zh-cn/library/hh567368(v=vs.110).aspx
说明了:Visual C++ 2010 实现了 C++0x 核心语言规范的许多功能,是前体 C++11,并且,Visual Studio 2012 中的 Visual C++ 在该扩展包含许多 C++11 功能。 下表列出了 C++11 核心语言功能及其实现的状态。Visual C++ 2010 和 Visual Studio 2012 中的 Visual C++。
N1610“选件类对象的初始化声明由 rvalues” 是一个早期尝试启用移动语义不 rvalue 引用。 在本讨论中,我们称之为“rvalue 引用 v0.1”。它由“取代 rvalue 引用 v1.0”。“Rvalue 引用 v2.0”,正是在 Visual C++ 2010 的工作开始,禁止 rvalue 从绑定到 lvalue 从而解决主安全问题引用。“ Rvalue 引用 v2.1“优化此规则。 考虑 vector
在特定条件下“Rvalue 引用 上述”添加新规则集自动生成移动构造函数和移动赋值运算符。 但是,这在 Visual Studio 2012 中的 Visual C++未实现,因为时间和资源约束。
在 decltype 轮询到工作文件 (版本 1.0) 后,它最后一刻接收小,但重要的 bug 修复 (版本 1.1)。 这是了感兴趣在 STL 和引发工作的程序员。
强类型的枚举 在 Visual C++ 2010 (特别是,有关显式指定的基础类型的部分部分支持)。 Visual Studio 2012 中的 Visual C++ 完全实现,他们完全实现 C++11 语义 前向声明枚举。
Visual C++ 2010 和 Visual Studio 2012 中的 Visual C++ 实现核心语言关键字 alignas/从轮询到工作文件的 对齐建议alignof。Visual C++ 2010 具有从 TR1 的 aligned_storage。 Visual Studio 2012 中的 Visual C++ 添加 aligned_union 和 std::align()到标准库。
显示的更改从 N2342“重新访问的 POD 的;解决的问题 568 核心 (版本 5)” 是 is_trivial 和 is_standard_layout 的向
这通过短,但复杂的发展。 最初, 版本 0.8,[[override]], [[hiding]] 以及 [[base_check]] 特性。 然后,版本 0.9属性使用上下文关键字消除并替换。 最后,版本 1.0它们减少到“final”在选件类和“override”和“final在函数。 这使它成为个 ascending 的扩展,因为 Visual C++ 2010 已经支持函数中的此“override”语法,并具有语义合理关闭会 C++11。“ final ”还支持,但是,在其他拼写“下方密封了”。 在 Visual Studio 2012,“override”和“final”标准拼写和语义完全支持。 有关更多信息,请参见override 说明符和final 说明符。
Atomics,强请比较和交换,双向范围,数据依赖项排序 然后指定标准库前,在 Visual Studio 2012 中的 Visual C++实现。
该报告核心语言。 有关 C++11 标准库,我们不具有一个以美观的表,但是,Visual Studio 2012 中的 Visual C++ 实现该接口,有两个异常。 首先,那么,当库功能取决于缺少在编译器的功能时,我们可模拟它要求 (例如,我们模拟 make_shared
新标头:
根据 C++11,emplace()/emplace_front()/emplace_back()/emplace_hint()/emplace_after() 的建立: 在“参数的任意”数字 (请参见“虚假 variadics”部分) 的任何容器实现。 例如,vector
虚假 variadics:Visual Studio 2012 中的 Visual C++ 具有模拟的 variadic 模板新架构。 在 Visual C++ 2008 SP1 和 Visual C++ 2010,subheaders 重复包括了不同的每次生成定义的宏,灭绝 0,1,2,3,或多个参数的超负载。 例如,
代码更易于维护,更易于使用 (添加 subheaders 适合数量的工作),和可读性。
单步执行与调试器抱歉更难!
std::pair pair(piecewise_construct_t, tuple
发送相同的消息到多个按组许多对元组超负载,和任何建立超负载,在编译时已占用大量内存。 因此,我们减少了无穷大。 在 Visual C++ 2008 SP1 和 Visual C++ 2010,不是 10 (即“variadic”模板支持 0 到 10 个参数,包含)。 默认情况下,不是 5 在 Visual Studio 2012 中的 Visual C++。 这使编译器内存消耗回什么是在 Visual C++ 2010。 如果需要更多参数 (例如,因此,如果您具有使用 6 元组) 的现有代码,所以紧急导出。 可以定义 _VARIADIC_MAX 项目在 5 和 10 之间包含。 将占用太多内存,并可能需要使用 /Zm 编译器选项保留多个空格预先生成标头的。
随机性: uniform_int_distribution 现已完成公平的,因此,shuffle() 在
对重载的抵抗 address-of 运算符: C++98/03 禁止 STL 容器的元素重载其地址运算符。 这就是"类别。CComPtr 执行,因此,需要与 CAdapt 的帮助器类选件防止这种超加载的 STL。 在 Visual C++ 2010的开发过程中,STL 更改使其拒绝重载地址更情况的运算符。 C++11 更改了要求使重载 address-of 运算符可接受。 C++11 和 Visual C++ 2010,提供帮助器函数 std::addressof(),而不管运算符重载,可以获取对象真实地址。 在发布之前 Visual C++ 2010,我们将尝试用“std::addressof(elem)”替换“&elem”显示时,正确有吸引力。 在 Visual Studio 2012 中的 Visual C++,我们进一步转到。 现在我们审核的所有容器和所有迭代器,因此,这些重载运算符地址的选件类应可在 STL 中。
Visual Studio 2012 中的 Visual C++ 超过 C++11 范围的方法有多种:
可怕迭代器: 如允许使用,但不要求由标准的 C++11,可怕迭代器实现,如中所述 “将泛型选件类中的依赖项 N2911 更快、更小程序的” 和 N2980“可怕迭代分配和初始化,版本 1 "。
文件系统:
和一个母版优化! 我们的容器现在最好较小的给定的所有其当前表示。 这表示为其容器对象,而不指向内容。 例如,std::vector 包含三个基元的指针。 在 Visual C++ 2010,x86 版本的模式,std::vector 为 16 字节。 在 Visual Studio 2012 中的 Visual C++,它是 12 个字节,最好较小的。 这很大,事务如果您有 100,000 个矢量在您的程序,Visual Studio 2012 中的 Visual C++ 将为您节省 400,000 字节。 减少内存使用量节省空间和时间。
这是通过避免 null 的分配器和比较存储实现,因为 std::allocator 和 std::less 是无状态的。 (这些优化为自定义分配器/比较器启用,前提是无状态的。 显然,监视状态的分配器/比较器存储不能避免,但是,某些非常少见。)
下表列出了字节显示容器的边界,x86 和 x64 平台的。 (32 位 ARM 与这些目的 x86 等效)。 这些桌帷发布模式,因为调试模式包含检查占用空间和时间的很多。 不同的列是 Visual C++ 2008 SP1,_SECURE_SCL 默认为 1,并且,对于 Visual C++ 2008 SP1 和_SECURE_SCL 手动设置为 0 最大速度。 Visual C++ 2010 和 Visual Studio 2012 中的 Visual C++ 默认 _SECURE_SCL 到 0 (现在称为 _ITERATOR_DEBUG_LEVEL)。
以上区别,我会后续更新每个含义和domo演示,敬请期待。