C++ 托管扩展语法升级清单

更新:2007 年 11 月

对于 Visual C++ 2005,Visual C++ 提供了一些功能,这些功能面向带有垃圾回收的虚拟机,如 .NET Framework。对于 Visual C++ 2008,已不支持 Managed Extensions for C++,并可能在未来发行版中完全移除。

使用 C++ 托管扩展的代码仍可以通过 /clr:oldSyntax 进行编译。请参见 /clr(公共语言运行库编译) 以获得更多信息。有关使用新语法的更多信息,请参见:

本主题列出了 C++ 托管扩展和新的 Visual C++ 语法之间的语法差异。

更新 C++ 托管扩展代码

  • 移除 #using <mscorlib.dll>。(现在,默认情况下引用此程序集。)

  • 将 __gc class 替换为 ref class。

  • 将 __gc struct 替换为 ref struct。

  • 将 __value class 替换为 value class。

  • 将 __value struct 替换为 value struct。

  • 从值类中移除默认构造函数。(C++ 托管扩展中允许使用值类型的默认构造函数,但 CLR 的性质妨碍了对这些构造函数进行可靠的调用,因此移除了此功能。)

有关引用类型和值类型的更多信息,请参见 Classes and Structs (Managed)

  • 将 __gc __interface 替换为 interface class。

有关接口关键字的更多信息,请参见 interface class

  • __abstract 替换为 abstract,并将其移动到类名的后面。有关更多信息,请参见 abstract (C++)

  • __sealed 替换为 sealed,并将其移动到类名的后面。有关更多信息,请参见 sealed

  • __property 替换为 property,将 get 和 set 方法组合到一个属性块中,并从这些访问器中移除尾部下划线/名称后缀。对于简单属性,无需显式定义访问器。索引属性的语法要求在属性类型后使用一对括号。有关更多信息,请参见 How to: Use Simple PropertiesHow to: Use Indexed Properties

  • __event 替换为 event (C++)

  • 将 __value enum 替换为 enum class

  • 将指向后跟引用类型(使用 __gc* 定义)的指针替换为 ^。有关更多信息,请参见 ^ (Handle to Object on Managed Heap)

  • 将指向可能存在于垃圾回收堆中的值类型的指针替换为 interior_ptr

  • 将使用 __pin 声明的指针替换为 pin_ptr 的实例,除非整个对象都已固定,在此情况下,将对内部指针先使用 interior_ptr,然后使用 pin_ptr。对于 Visual C++ 2005,此模板在 cli Namespace 中定义。

  • 将 new 替换为 gcnew

  • 当 0 或 null 值用于指示指向垃圾回收堆的指针或句柄不指示对象时,或使用比较来检查指针和句柄时,将 0 或 null 值替换为 nullptr

  • 将使用 __gc[] 声明的垃圾回收数组更新为使用 array 类型。对于 Visual C++ 2005,此模板在 cli Namespace 中定义。

  • 移除 __box 的所有实例。有关更多信息,请参见Implicit Boxing

  • 从字符串中删除“S”前缀(现在,编译器根据使用字符串的上下文来确定字符串是否是文本。)

  • 将 C++ 托管扩展中要求的显式声明和重载运算符用法(如 op_Addition、op_Subtraction)替换为传统的 C++ 语法。有关更多信息,请参见 User-Defined OperatorsOperator Overloading

  • 更新转换运算符(这些运算符使用 C++ 托管扩展语法中的 op_Implicit 和 op_Explicit)。有关更多信息,请参见 User-Defined Conversions

  • __typeof 替换为 typeid

  • __try_cast 替换为 safe_cast。对于 Visual C++ 2005,此模板在 cli Namespace 中定义。

  • 如果要对具有 CLR 的程序集签名属性的程序集进行签名(又称作赋予程序集强名称),则应当从代码中移除这些属性,并改用程序集签名链接器选项。有关更多信息,请参见 强名称程序集(程序集签名)

请参见

概念

混合(本机和托管)程序集

New C++ Language Features