适用于运行时平台的组件扩展
Visual C++ 提供语言扩展帮助你在运行时平台编程。 通过使用Visual C++ 组件扩展 (C++/CX),可以编写在本机代码编译的Windows 应用商店 应用程序和组件。 可以通过倚靠Windows 运行时 COM 接口可以直接编写程序创建 Windows 应用商店应用程序,但是通过C++/CX可以用构造函数、异常和其他现代 C++ 编程习语工作。 若要使 C++ 在.NET 平台的托管执行环境编程,可以使用C++/CLI。
两个运行时,一组扩展名
C++/CX 是 C++/CLI 的子集。 扩展名是 C++/CX 和 C++/CLI共有的,语义取决于是否面向公共语言运行时(CLR)或 Windows 运行时。 若要在 Windows 运行时编译您的应用程序,请指定 /ZW 编译器选项。 编译它在 CLR 执行,请指定 /clr 编译器选项。 当使用 Visual Studio 创建项目时,这些开关会自动设置。
有关如何在 C++ 中创建Windows 应用商店应用程序的更多信息,请参见 Roadmap for Windows Store apps using C++。
C++/CLI 扩展 ISO/ANSI C++ 标准,定义基于Ecma C++/CLI 标准。 有关详细信息,请参阅Visual C++ 中的 .NET 编程。
数据类型关键字
语言扩展包括 合计关键字,关键字包括由空格分隔的两个标记。 标记一方面可能意味着要单独使用,另一方面意味着要一起使用它们。 例如,单词“ref”是普通标识符,单词“类”是声明本机类的关键字。 但是,当这些字组合形成 ref class时,得到的复合关键字声明一个公认为运行时类的实体。
扩展还包括区分上下文的关键字。 关键字被视为区分上下文是基于包含它的此类语句及其该语句的位置。 例如,该标记“属性”既可以是标识符,也可以声明特定公共类成员。
下表列出了 C++ 语言扩展的关键字。
关键字 |
区分上下文 |
用途 |
引用 |
---|---|---|---|
ref class ref struct |
否 |
声明类。 |
|
value class value struct |
否 |
声明值类的值。 |
|
interface class interface struct |
否 |
声明接口。 |
|
enum class enum struct |
否 |
声明枚举。 |
|
property |
是 |
声明属性。 |
|
delegate |
是 |
声明委托。 |
|
event |
是 |
声明事件。 |
重写说明符
可以使用下列关键字为派生限定替代行为。 虽然new 关键字不是 C++ 扩展,但此处列出,因为它可用于附加的上下文中。 某些说明符用于本机编程也是有效的。 有关详细信息,请参阅如何:声明在本机生成的重写说明符。
关键字 |
区分上下文 |
用途 |
引用 |
---|---|---|---|
abstract |
是 |
指示函数或类是抽象的。 |
|
new |
否 |
指示函数不是基类版本的重写。 |
|
override |
是 |
指示方法必须是一个基类版本的重写。 |
|
sealed |
是 |
防止类用作基类。 |
泛型关键字
添加下面的关键字以支持泛型类型 。 有关详细信息,请参阅泛型(C++ 组件扩展)。
关键字 |
区分上下文 |
用途 |
---|---|---|
generic |
否 |
声明一个泛型类型。 |
where |
是 |
指定应用于泛型类型参数的约束。 |
混合关键字
以下关键字被添加到 C++ 扩展。
关键字 |
区分上下文 |
用途 |
引用 |
---|---|---|---|
finally |
是 |
指示默认值异常处理行为。 |
|
for each, in |
否 |
枚举集合元素。 |
|
gcnew |
否 |
在垃圾回收堆中分配类型。 而不是使用new和 delete 。 |
|
ref new |
是 |
分配Windows 运行时类型。 而不是使用new和 delete 。 |
|
initonly |
是 |
指示成员只能在声明或静态构造函数中被初始化。 |
|
literal |
是 |
创建一个文本变量。 |
|
nullptr |
否 |
指示图柄或指针不指向对象。 |
模板构造
下面的语言构造作为模板实现,而不是作为关键字。 如果指定**/ZW** 编译器选项,他们在lang 命名空间中被定义。 如果指定**/clr** 编译器选项,他们在cli 命名空间中被定义。
关键字 |
用途 |
引用 |
---|---|---|
array |
声明数组。 |
|
interior_ptr |
在引用类型中(仅 CLR) 指向数据。 |
|
pin_ptr |
(仅 CLR) 指向 CLR 引用类型暂时禁止垃圾回收系统。 |
|
safe_cast |
确定并执行一个运行时类型的最佳强制转换方法。 |
|
typeid |
(仅 CLR)恢复Type 对象,该对象描述给定类型或对象。 |
声明符
以下类型声明指示运行时自动管理分配对象的生存期和删除。
运算符 |
用途 |
引用 |
---|---|---|
^ |
为对象声明句柄;即Windows 运行时 或 CLR 对象指针不再可用时会自动删除。 |
|
% |
声明跟踪引用;即Windows 运行时 或 CLR 引用不再可用时会自动删除。 |
其他构造和相关主题
本节列出了不同的编程构造以及关于 CLR 的主题。
主题 |
描述 |
---|---|
(Windows 运行时 和 CLR)使用关键字作为标识符。 |
|
(Windows 运行时 and CLR) 使函数采用可变的参数数目。 |
|
列出在 C++ 整型类型位置使用的 CLR 类型。 |
|
appdomain __declspec修饰符 |
__declspec 修饰符规定静态和全局变量存在于每个应用程序域。 |
描述如何解释 C 样式转换。 |
|
__clrcall调用约定 |
指示符合 CLS的调用约定。 |
__cplusplus_cli |
|
描述如何定义自己的 CLR 特性。 |
|
提供异常处理的概述。 |
|
演示成员函数如何重写任意成员。 |
|
讨论在程序集组件中客户端程序集如何访问所有类型。 |
|
演示值类型进行装箱的条件。 |
|
讨论在编译时如何检测类型的属性。 |
|
演示托管和非托管功能如何在同一个模块共存。 |
|
进程 __declspec修饰符 |
__declspec 修饰符规定静态和全局变量存在于每个进程。 |
演示运行时类型信息的 CLR 版本。 |
|
讨论字符转换为String的编译器版本。 |
|
启用一个类型的移动从一个提供程序集到另一个程序集,以便客户端代码不必重新编译。 |
|
演示用户定义的特性。 |
|
导入外部程序集。 |
|
使用/doc(处理文档注释)(C/C++) 解释基于 XML 代码文件。 |