Visual C++ 2005 将为面向 Windows 和 .NET Framework 的系统和应用程序开发人员提供比其较低版本更多的功能和更细粒度的控制,人们计划在该产品的所有领域(包括语言、编译器和核心库)进行关键改进。
这些增强功能将使 C++ 开发人员能够更有效地面对 CLR、优化代码的性能、面对 64 位 Windows 以及提高应用程序的安全性。此外,Visual C++ 2005 将 使开发人员能够直接在 Visual Studio 2005 IDE 中为移动设备生成本机 C++ 应用程序。(有关嵌入式 C++ 开发的详细信息,请参阅 “基于设备的开发”一节)。
通过 Visual C++ .NET 2002 版和 2003 版,托管扩展使开发人员能够显式利用 CLR 和 .NET Framework。在 Visual C++ 2005 中,现有的托管扩展语法将继续得到完全支持。此外,Visual C++ 将通过强大的新功能以及用于编写托管代码的更为优雅的语法为 CLR 和 .NET Framework 提供扩展支持。该语法现正在作为到 ECMA 标准化公共语言基础结构 (CLI) 的 C++ 绑定而进行 ECMA 标准化。这一新语法将称为 C++/CLI。#t#
C++ 语言的 C++/CLI 子集主要将在 Visual C++ 2005 中实现,并将为 Visual C++ 开发人员提供很多新功能。C++ 开发人员将***次能够使用真正的 C++ 编程范型编写 .NET 连接的应用程序。例如,将为由 CLR 和垃圾回收器管理的代码和数据启用 C++ 模板和 C++ 样式的确定性终止。此外,C++/CLI 还为 C++ 提供很多 CLR 编程范型,包括泛型的 CLR 实现。
C++/CLI 还简化了定义和使用托管数据类型的方式。新标准引入的关键字对于 C++ 开发人员而言,比当前托管扩展的下划线-下划线 关键字更为直观。在 C++/CLI 中,ref 关键字用来以与托管扩展 __gc 关键字类似的方式定义垃圾回收类:
- ref class MyRefClass { /* ... */ };
此外,C++/CLI 还引入一种新的类型 — 句柄,该类型用来表示自动垃圾回收的使用。句柄借用指针的语法,但使用加字符号 (^) 而不是星号 (*)。关键字 gcnew 用于创建上述垃圾回收对象,并且返回一个句柄:
- MyRefClass ^ c = gcnew MyRefClass();
通过 C++/CLI,开发人员还将能为句柄类型合并入传统的 C++ 样式确定性终止。这意味着可使用正常的 C++ 堆栈分配语法选择性地将引用类型作为对象进行实例化。这样,该对象将在脱离作用范围时自动调用它的析构函数。该功能启用了在其他面向 CLR 的语言中不可用的编程风格。
除了 C++/CLI 支持以外,Visual C++ 编译器还将为面向 CLR 的代码提供多个代码生成增强功能。这些增强功能包括:能够指定不包含本机 x86 指令的“纯粹”图像,以及通过 CLR 验证过程的“安全”图像。而且,Visual C++ 2005 编译器能够比其他托管语言更好地优化 MSIL。
为 Visual C++ 2005 中的 C++ 编译器规划了很多增强功能,其中之一便是 Profile Guided Optimizations (POGO)。POGO 技术使编译器能够测量应用程序的各种数据,并收集有关应用程序在运行时使用方式的信息。这些信息使 Visual C++ 能够基于真实的应用程序使用模式进一步优化生成的代码。