Visual Studio 2013 中 Visual C++ 的新增功能

本文档介绍 Visual Studio 2013 中的 Visual C++ 中新增和增强的功能。

有关 Visual Studio 2013 中其他附加内容的信息,请参阅 Visual Studio 2013 中的新增功能

改进的 ISO C/C++ 标准支持

编译器

  • 支持以下 ISO C++11 语言功能:

  • 支持以下 ISO C99 语言功能:

    • _Bool

    • 复合文本。

    • 指定的初始值设定项。

    • 组合带有代码的声明。

  • 字符串文本转换为可修改的值可通过使用新编译器选项 /Zc:strictStrings 禁用。在 C++98 中,已弃用从字符串文本转换至 char *(和将宽字符串文本转换为 wchar_t *)。在 C++11 中,已将转换完全移除。虽然编译器可以严格遵循该标准,但提供了 /Zc:strictStrings 选项,以便您控制转换。默认情况下,该选项是关闭的。注意,当您在调试模式下使用此选项,STL 将无法编译。

  • rvalue/lvalue 引用转换。通过 rvalue 引用,C++11 可清晰地区分 lvalue 和 rvalue。过去,在特定强制转换方案中,Visual C++ 编译器不提供此功能。已添加新编译器选项(/Zc:rvalueCast),以使编译器与 C++ 语言的工作文件相符(请参阅第 5.4 节,[expr.cast]/1)。

    未指定选项时,该默认行为与 Visual Studio 2012 中的相同。

说明说明

* 默认功能下,不支持使用 =default 逐一请求成员移动构造函数和移动赋值运算符。

C99 库

为下列标头中缺少的函数添加了声明和实现:math.hctype.hwctype.hstdio.hstdlib.hwchar.h。同样添加的还有新标头 complex.hstdbool.hfenv.hinttypes.h,以及在这些新标头中声明的所有函数的实现。还有新的 C++ 包装器标头(ccomplexcfenvcinttypesctgmath),并且更新了许多其他内容(ccomplexcctypeclocalecmathcstdintcstdiocstringcwcharcwctype)。有关更多信息,请参阅 Visual Studio 2013 中的 C99 库支持

标准模板库

  • 支持 C++11 显式转换运算符、初始值设定项列表、范围枚举和 variadic 模板。

  • 现在所有容器都支持 C++11 细化的元素要求。

  • 支持这些 C++14 功能:

    • “透明运算符函子”less<>greater<>plus<>multiplies<> 等。

    • make_unique<T>(args...)make_unique<T[]>(n)

    • cbegin()/cend()rbegin()/rend()crbegin()/crend() 非成员函数。

  • <atomic> 接收多个性能增强。

  • <type_traits> 接收主要稳定性和代码修复。

重大更改

对 ISO C/C++ 标准的改进支持可能需要对现有代码进行更改,从而符合 C++11 并在 Visual Studio 2013 中的 Visual C++ 中正确编译。有关更多信息,请参阅Visual C++ 中的重大更改

有关新的 C++11/14 语言和 STL 功能的详细信息,请参阅 对 C++11 功能的支持(现代 C++)Visual Studio 2013 中的 C++11/14 STL 功能、修复和重大更改

Visual C++ 库增强功能

  • C++ REST SDK 已添加。它具有 REST 服务的现代 C++ 实现。有关更多信息,请参阅 C++ REST SDK

  • C++ AMP 纹理支持已改进。现在包括对 mipmap 和新采样模式的支持。

  • PPL 任务支持多个计划技术和异步调试。采用新 API,可为常规结果和异常条件创建 PPL 任务。

C++ 应用程序性能

  • 自动向量化现在可以识别和优化更多 C++ 模式,加快您的代码运行速度。

  • ARM 平台和 Atom 微型体系结构代码质量增强功能。

  • __vectorcall 调用约定已添加。使用 __vectorcall 调用约定来传递向量类型参数,从而使用向量寄存器。

  • **新链接器选项。**使用 /Gw(编译器)和 /Gy(汇编)开关,使链接器优化生成精简二进制文件。

  • C++ AMP 共享内存支持,可减少或消除 CPU 和 GPU 间的数据复制。

  • 按配置优化选项 (PGO) 增强:

    • 通过使用 PGO 实现已优化的应用程序工作集的缩减,从而提高性能。

    • 面向 Windows 应用商店应用开发的新 PGO。

Windows 应用商店应用开发支持

  • **支持值结构中的装箱类型。**现在可以使用可以为空的字段(例如与 IBox<int>^ 相对的 int)来定义值类型。这意味着字段可以具有值,或者与 nullptr 相等。

  • **更丰富的异常信息。**C++/CX 支持能够在整个应用程序二进制接口 (ABI) 中获取和传播各种异常信息的新 Windows 错误模型;这包括调用堆栈和自定义消息字符串。

  • **Object::ToString() 现在为虚拟。**现在可以重写用户定义的 Windows 运行时引用类型中的 ToString

  • **支持已弃用的 API。**公共 Windows 运行时 API 现在可标记为已弃用并可收到一条自定义消息,此消息显示为生成警告并可提供迁移指南。

  • **调试器改进。**支持本机/JavaScript 互操作调试、Windows 运行时异常诊断和异步代码调试(windows 运行时和 PPL)。

说明说明

除本节中介绍的 C++ 特定功能和增强功能外,Visual Studio 中的其他增强功能还可帮助您编写更好的 Windows 应用商店应用。有关这些功能的详细信息,请参阅 Windows 8.1 功能指南。有关新应用程序模板的详细信息,请参阅 Windows 应用商店应用的 C#、VB 和 C++ 项目模板。有关新平台功能的列表,请参阅 Windows 8.1 预览版:新 API 和功能

诊断增强功能

  • **调试器改进。**支持异步调试和“仅我的代码”调试。

  • **代码分析类别。**现在可以查看代码分析器的分类输出,帮助您找到并修复代码缺陷。

  • **XAML 诊断。**现在可以诊断 XAML 中的 UI 响应和电池使用情况问题。

  • 图像和 GPU 调试改进。

    • 在实际设备上远程捕获和重放。

    • 同步 C++ AMP 和 CPU 调试。

    • 改进的 C++ AMP 运行时诊断。

    • HLSL 计算着色器跟踪调试。

三维图形增强功能

  • 图像内容管线支持预乘 alpha DDS 格式。

  • 图像编辑器使用内部预乘 alpha 进行呈现,从而避免呈现暗的光晕等项目。

  • **图像和模型编辑器。现在图像编辑器和模型编辑器的“着色器设计器”**中支持用户定义的筛选器创建。

IDE 与工作效率

用 C++ 编码时,Visual Studio IDE 的重大改进将有助于提高您的工作效率。

  • 改进的代码格式设置。您可以将多个格式设置应用于 C++ 代码。使用这些设置,您可以控制大括号和关键字、缩进、间距和自动换行的新行位置。当完成语句和块并且将代码粘贴到文件中时,代码将自动进行格式化。若要修改格式设置,请在 Visual Studio 的菜单栏上选择“工具”“选项”,依次展开**“文本编辑器”“C/C++”“格式设置”节点,然后进行更改。您还可以使用“快速启动”**框来访问这些选项。

  • **大括号完成。**现在,C++ 代码会自动完成对应于这些开始字符的结束字符:

    • {(大括号)

    • [(方括号)

    • ((括号)

    • '(单引号)

    • "(双引号)

  • 附加 C++ 自动完成功能。

    • 添加用于类类型的分号。

    • 完成对原始字符串文本使用括号。

    • 完成多行注释 (/* */)

  • 查找所有引用自动在后台引用显示出文本匹配列表后对其进行解析和筛选。若要禁用引用解析,可以在 Visual Studio 的菜单栏中选择**“工具”“选项”,依次展开“文本编辑器”“C/C++”“高级”节点,然后在“引用”下更改“禁用解析”**设置。

若要修改大括号完成设置,请在 Visual Studio 的菜单栏上选择**“工具”“选项”,依次展开“文本编辑器”“C/C++”“常规”节点,然后进行更改。您还可以依次展开“文本编辑器”“所有语言”“常规”**节点,更改所有 Visual Studio 语言的设置。

若要修改特定的 C++ 设置,请在菜单栏上依次选择**“工具”“选项”,依次展开“文本编辑器”“C/C++”“高级”**节点,然后进行更改。

  • **基于上下文的成员列表筛选。**无法访问的成员已从 IntelliSense 成员列表中筛选出来。例如,私有成员不会在成员列表中显示,除非您修改了实现此类型的代码。当成员列表中处于打开状态时,您可以按 Ctrl+J 移除筛选的一个级别(仅适用于当前成员列表窗口)。可以再次按 Ctrl+J 移除文本筛选和显示每个成员。

  • **参数帮助滚动。**参数帮助工具提示中显示的函数签名现在将根据实际输入参数的数量而改变,而不是只显示一个随机的签名且不根据当前上下文更新。函数显示在嵌套函数上时,参数也会适当地帮助函数。

  • **切换标头/代码文件。**现在,通过使用快捷菜单或键盘快捷方式上的命令,可以在标题及其相应代码文件之间切换。

  • 可调整大小的 C++ 项目属性窗口。

  • **在 C++/CX 和 C++/CLI 中自动生成事件处理程序代码。**在键入代码向 C++/CX 或 C++/CLI 代码文件中添加事件处理程序时,编辑器可以自动生成委托实例和事件处理程序定义。可以自动生成事件处理程序代码时,会显示工具提示窗口。

  • **DPI 识别增强功能。**现在,针对应用程序清单文件的 DPI 识别设置支持“每个高 DPI 识别监视器”的设置。

  • **更快的配置切换。**对于大型应用程序,切换配置(尤其是后续切换操作)将更快速地执行。

  • 生成时效。

    • **更快生成。**许多优化和多核使用率使生成更加快速,对于大型项目来说尤为如此。引用了 C++ WinMD 的 C++ 应用程序的增量生成也更加快速。
  • 有关 IDE 中其他添加项和增强功能的信息,请参阅 Visual Studio 2013 中的新增功能及其引用的其他文章。

请参见

概念

Visual Studio 2013 中的新增功能

其他资源

Visual C++ 团队博客