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

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

有关 Visual Studio 2012的其他新增功能的信息,请参见 Visual Studio 2012 中的新增功能

备注

有关集成开发环境创建 Windows 应用商店 apps 的开发人员的 (IDE) 功能的信息,请参见 开发 windows 存储 apps 使用 Visual Studio 2012

改进的 C++11 标准的支持

Hh409293.collapse_all(zh-cn,VS.110).gif标准模板库

  • 为新 STL 标头支持:<atomic>、<chrono>、<condition_variable>、<filesystem>、<future>、<mutex>、<ratio>和 <thread>。

  • 若要优化内存资源用法,容器现在较小。 例如,在 x86 具有默认设置的发布模式,std::vector 在 Visual Studio 2010 的 16 个字节缩小到在 Visual Studio 2012的 12 个字节,因此,std::map 在 Visual Studio 2010 的 16 个字节缩小到在 Visual Studio 2012的 8 个字节。

  • 如允许使用,但不要求由标准的 C++11,可怕迭代中实现。 有关更多信息,请参见 PDF 文档 可怕迭代分配和初始化

Hh409293.collapse_all(zh-cn,VS.110).gif其他 C++11 提高

  • **基于范围 for 循环。**可以与数组、STL 容器和 Windows 运行时 集合使用在窗体 for (for-range-declaration :expression )编写更可靠的循环。 这是核心语言的一部分支持。 有关更多信息,请参见基于范围的 for 语句 (C++)

  • 无状态的 lambda,是从一个空 lambda 介绍人启动的代码块 [] 并且不访问局部变量,隐式现在是函数的转换指针作为 C++11 标准要求。 有关更多信息,请参见在C++中Lambda表达式

  • **范围枚举支持。**C++ enum class 枚举键现在支持。 下面的代码演示此枚举键与前面 enum 行为不同。

    enum class Element { Hydrogen, Helium, Lithium, Beryllium };
    void func1(Element e);
    func1(Hydrogen); // error C2065: 'Hydrogen' : undeclared identifier
    func1(Element::Helium); // OK
    

Windows 应用商店 App 开发支持

Visual C++ 编译器和链接器

  • **自动 vectorizer。**编译器分析在代码中循环和,如有可能,发出使用向量寄存器和命令存在任何现代处理器的命令。 这使得循环运行速度更快。 (处理器指令称为 SSE,流式 SIMD 扩展名)。 因为自动的,则将其您不必启用或请求此优化。

  • **自动 parallelizer。**编译器可以分析在代码中循环和发出分布在多个核心或处理器中计算的命令。 这会使循环运行速度更快。 默认情况下,因为尚未启用必须请求此优化。 在大多数情况下,它在要并行化的循环之前的编码帮助功能包括 #pragma loop(hint_parallel(N)) 。

    自动 vectorizer 和自动 parallelizer 可能,以便计算在多个内核和代码之间分布在每个内核使用其向量寄存器。 有关更多信息,请参见自动并行化错误和警告

新在 Visual Studio 2012 更新 1

并行编程的支持。

Hh409293.collapse_all(zh-cn,VS.110).gifC++ 加速大量并行 (AMP)

C++ AMP 加快的 C++ 代码的执行利用通常存在的数据并行硬件,因为在离散图形卡的 GPU。 C++ AMP 编程模型包括多维数组、索引,内存调用,平铺和数学函数库。 使用 C++ AMP 语言扩展和编译器限制,可以控制数据如何从 CPU 移动到 GPU 和。 有关更多信息,请参见C++ AMP (C++ Accelerated Massive Parallelism)

Hh409293.collapse_all(zh-cn,VS.110).gifC++ 加速大量并行分析 (AMP) 调试和

**调试。**使用 C++ AMP 面向 GPU 的 apps 的调试体验与其他 C++ apps 的调试。 这包括前面提到的新并行调试添加。 请参见 调试 GPU 代码

**分析。**如果现在分析对于基于 C++ AMP 和其他基于 Direct3D 的编程模型的 GPU 事件支持。 请参见 GPU 活动关系图

Hh409293.collapse_all(zh-cn,VS.110).gif泛型并行编程增强功能

使用移动到多核和多个核心体系结构的硬件,开发人员可能不再依赖于从单核心持续增长的时钟速度。 并行编程方式在 并发运行时 支持使开发人员可以利用这些新结构。

在 Visual Studio 2010,强大的 C++ 并行化库 (如 并行模式库 与函数一起表示形式,利用并发中表示复杂的数据流管道。 在 Visual Studio 2012,这些库将扩展以提供更好的性能,多个控件,并且,更丰富的用于开发人员最需要的并行模式的支持。 现在提供的范围包括:

  • 支持 asynchrony 和延续的丰富的基于任务的编程模型。 有关更多信息,请参见任务并行(并发运行时)

  • 并行算法,支持分叉联接并行度 (parallel_forparallel_for 与关联,parallel_for_eachparallel_sortparallel_reduceparallel_transform)。

  • 并发安全的容器,提供 std 数据结构的线程安全版本例如 priority_queuequeuevectormap

  • 异步代理库中,开发人员可以使用表示数据流管道自然分解为并发单元。

  • 实现平滑结构的自定义项的计划程序和资源管理器的架构在该列表中。 请参见 任务计划程序(并发运行时)

Hh409293.collapse_all(zh-cn,VS.110).gif泛型并行调试增强

除了 并行任务 窗口和 并行堆栈 窗口之外,Visual Studio 2012 提供了新的 并行监视 窗口,以便您可以检查一个表达式的值在所有线程上的和过程,并执行排序和筛选在结果中。 您也可以使用您的可视化工具扩展窗口,因此,您可以利用新多进程在所有工具窗口间支持。 有关更多信息,请参见如何:使用“并行监视”窗口

IDE

在 C++ 时,代码在 Visual Studio IDE 中的工具提供了重大改进您更加用生产力的。 有关 IDE 增强的更多信息,请参见 Visual Studio 2012 的产品亮点

  • **Visual Studio 模板支持。**现在可以使用 Visual Studio 模板技术生成 C++ 项目模板和项模板。

  • **异步解决方案加载。**项目现在是可以更快地开始工作最初这样的解决方案中加载的 asynchronously-the 关键部分。

  • **远程调试的自动部署。**文件的部署远程调试对 Visual C++ 简化。 在项目上下文菜单的部署选项可自动复制到远程计算机上调试配置属性指定的文件。 文件添加到远程计算机不再需要手动复制。 有关更多信息,请参见远程调试本地生成的项目

  • **C++/CLI IntelliSense。**C++/CLI 现在都可以获得完全的 IntelliSense 支持。 IntelliSense 功能 (例如快速信息,参数可帮助,列出成员,并且,自动完成用于 C++/CLI 现在可以使用。 此外,在中和 IDE 改进列出的其他 IntelliSense 还介绍 C++/CLI 的工作。

  • **更丰富的 IntelliSense 工具提示。**C++ IntelliSense 快速信息的工具提示现在显示更丰富的 XML 文档注释样式信息。 如果使用一 API 库 (例如,C++ AMP 具有 XML 文档与该注释,则 IntelliSense 工具提示显示更多信息。 然后,因此,如果您的代码具有 XML 文档注释,IntelliSense 工具提示中显示丰富的信息。

  • **C++ 代码构造。**主干代码为开关可用,如果另一个,用于循环,同时,其他基本代码构造,列表中的成员下拉列表。 选择代码段从列表插入到您的代码中然后填写所需的逻辑。 在编辑器中也可以创建编写您的自定义节中使用。 有关更多信息,请参见代码段

  • **列出成员增强功能。**在键入代码到代码编辑器,列表的成员下拉列表会自动出现。 筛选结果,因此,仅相关成员显示,在键入。 您可以控制字段筛选列表。选项 对话框的成员使用在 文本编辑器C/C++高级下的逻辑。 有关更多信息,请参见使用 IntelliSense

  • **语义着色。**默认情况下类型、枚举、宏和其他 C++ 标记现在具有着色。 有关更多信息,请参见在代码和文本编辑器中编写代码

  • **引用突出显示。**选择符号现在显示符号的所有实例在当前文档的。 按 Ctrl+Shift+Up 箭头或移动的 Ctrl+Shift+Down 箭头显示在中的中引用。 可以启用此函数在 选项 对话框中,在 文本编辑器下,C/C++高级

应用程序生存周期管理工具

Hh409293.collapse_all(zh-cn,VS.110).gif静态代码分析

更新 C++ 的静态分析提供更丰富的错误上下文信息、更多分析规则和更好的分析结果。 在新 代码分析 窗口,可以按关键字、项目和严重级别筛选消息。 当您选择窗口中的某条消息时,消息中触发的代码行在代码编辑器中显示。 对于某些 C++ 警告,消息列表显示的源行这会导致该警告的执行路径;决定点和采用的原因特定路径显示。

代码分析。Visual Studio 2012的大多数编辑器中。 在 project professional,版和旗舰版,所有规则包括在内。 在 Windows 8 和 windows 学习版中调用,最重要的警告包括在内。 代码分析在 Web 学习版中不包含。

这是其他一些代码分析改进:

  • 新的并发警告帮助您通过确保避免并发 bug 您在多线程的 C/C++ 程序使用正确的锁的专业。 该分析器检测潜在的争用条件、锁定顺序反向、"调用方/被调用方锁定违反协定的,不匹配的同步操作和其他并发 bug。

  • 可以指定要应用于代码分析运行使用规则集 C++ 规则。

  • 代码分析 窗口,您可以插入到源代码中禁止显示一个选定警告的说明。

  • 可以引发静态代码分析的准确性和完整性使用它对它们 Microsoft 源代码注释语言 (SAL) 描述功能如何使用其参数,假设并确保的新版本会使它在完成。

  • 为 64bit C++ 项目的支持。

有关如何提高代码的质量的更多信息,请参见 使用代码分析工具分析应用程序质量

Hh409293.collapse_all(zh-cn,VS.110).gif更新单元测试框架

使用新的 C++ 单元测试在 Visual Studio 的结构编写 C++ 单元测试。 添加新的单元测试项目对于现有 C++ 解决方案中找到 C++ 单元测试项目 模板。Visual C++ 类别下 新建项目 对话框。 编写单元测试的开始在文件 Unittest1.cpp 中生成的 TEST_METHOD 代码存根测试。 当测试代码编写时,请生成解决方案。 当运行时通过选择 查看测试,打开 单元测试资源管理器 窗口中,其他窗口单元测试资源管理器,然后,在您所需的测试用例的快捷菜单上,选择 运行所选测试。 在测试运行完成后,可以查看测试结果和其他的堆栈跟踪信息在同一窗口。 请参见使用单元测试验证代码创建和运行针对 Windows 应用商店应用程序的单元测试

Hh409293.collapse_all(zh-cn,VS.110).gif体系结构依赖项关系图

更好地了解您的代码中,解决方案现在可以生成二进制文件的依赖项关系图,选件类,命名空间,并包含文件。 在菜单栏上,依次选择 体系结构生成依赖项关系图、然后 针对解决方案对于包含文件 生成依赖项关系图。 当关系图生成完成后,可通过展开每个节点进行测试,通过将了解依赖关系在节点之间,并通过在快捷菜单上选择 查看内容 浏览源代码节点的。 若要生成依赖项关系图为包括文件,在 *.cpp 源代码文件的快捷菜单或 *.h 标头文件,选择 生成包含文件的关系图。 请参见 在依赖项关系图上可视化代码依赖项

Hh409293.collapse_all(zh-cn,VS.110).gif体系结构资源管理器

使用体系结构资源管理器,可以测试在 C++ 解决方案、项目或文件的属性。 在菜单栏上,依次选择 体系结构窗口体系结构资源管理器。 可以选择感兴趣的节点,例如,类视图。 在这种情况下,工具窗口的右侧展开与命名空间列表。 如果选择命名空间,新列此命名空间显示选件类、结构和枚举的列表。 可以继续测试这些资产,或者返回到最左侧的列启动另一个查询。 请参见 使用体系结构资源管理器查找代码

Hh409293.collapse_all(zh-cn,VS.110).gif代码覆盖率

更新代码复盖率动态检测二进制文件运行时。 这降低配置系统开销并提供更好的性能。 可以从单元还会收集代码复盖率数据的测试 C++ 应用程序。 有关如何创建和运行单元测试的更多信息,请参见单元测试此机制部分。 在创建后 C++ 单元在您的解决方案测试,则可使用 单元测试资源管理器 查看测试。 要运行单元在 单元测试资源管理器测试并收集代码复盖率数据。它们,选择,分析代码覆盖率。 您可以检查 代码覆盖率结果 的代码复盖率结果"窗口在菜单栏上,选择 测试窗口代码覆盖率结果。 请参见 使用代码覆盖率确定所测试的代码量

请参见

概念

Visual Studio 2012 中的新增功能

其他资源

Visual C++ 团队博客

在 Visual Studio 中的 Visual C++ 2012