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

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

详情参见MSDN中的C++/CLI 迁移入门

更新 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 替换为 interface class ,将 get 和 set 方法组合到一个属性块中,并从这些访问器中移除尾部下划线/名称后缀。对于简单属性,无需显式定义访问器。索引属性的语法要求在属性类型后使用一对括号。有关更多信息,请参见 How to: Use Simple Properties 和 How 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 或空值用于指示指向垃圾回收堆的指针或句柄不指示对象时,或使用比较来检查指针和句柄时,将 0 或空值替换为 nullptr 。

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

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

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

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

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

  • 将 __typeof 替换为 typeid 。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值