1

我来自 C# 背景,学习 C++,特别是在 Windows Phone 8 平台上。

许多代码示例(随 SDK 一起安装)显示了 Hat 运算符的用法 ^(此处参考:戴帽子的类型)。

例如:

void PhoneDX::Initialize(CoreApplicationView^ applicationView)
{
    // ... function body
}

我想知道:

  • 为什么大多数指针都以这种方式定义,特别是在 Windows Phone 8 上?

  • 该语法是强制性的吗?假设我正在使用来自另一个平台的 C++ 本机库(不使用此语法)。它应该没有问题吗?

4

2 回答 2

3

hat 是一种编译器支持的智能指针类型,旨在使 Windows 运行时类型更易于从 C++ 代码中使用。正如“戴帽子的类型”和该系列的其他文章中所讨论的那样,C++/CX 语言扩展是可选的:任何可以使用 C++/CX 编写的代码都可以在不使用语言扩展的情况下用 C++ 编写,尽管更大代码复杂性和冗长。

这里的关键是帽子旨在促进使用 Windows 运行时类型的代码。通常,您应该将 C++/CX 和 Windows 运行时类型的使用限制在组件的边界:您的大部分代码应该是标准的、可移植的、普通的 C++ 代码。应使用 C++/CX (1) 包装 C++ 代码,使其可通过 Windows 运行时使用,以及 (2) 使用组件中的其他 Windows 运行时组件。

所以,是的,语法是可选的,但是在编写必须与 Windows 运行时类型一起使用的代码时,您应该强烈考虑使用它。您应该能够使用任何普通的 C++ 代码而无需修改,但需要注意的是 Windows Store 应用程序和 Windows Phone 应用程序以低权限运行并且某些功能不可用(例如,没有控制台,因此控制台 I/O 不可用) t 工作,并且运行时提供专门的进程生命周期管理工具,因此调用exit是一个坏主意)。

于 2013-01-11T01:22:28.770 回答
1

您可能很难掌握它,因为它有点像从 (1) C# 引用到 (4) C++/CX 帽子的复合飞跃,中间停在 (2) C++ 指针然后 (3) 引用计数对象。

智能^指针是一种语言扩展,不是标准 C++ 的一部分,用于处理 Windows 运行时类型(引用计数)

所以回答你的观点:

  • 如果您在 Windows Phone 8 中经常看到它们,那是因为 ^ 用于 Windows 运行时类型,在该平台示例中会大量使用(因为示例试图演示该平台的 api 和功能)。
  • 您需要对该库使用约定,这可能需要您使用它定义的类型(如果它有自己的智能指针)或标准/常规指针(即 *)或标准库智能指针(即 shared_ptr)。

Some concepts that should help you understanding this would be the lifetime of C++ objects, deterministic destruction (vs. waiting for a garbage collector to kick in), reference counting, stack/static vs. heap/dynamic allocation of objects.

于 2013-01-11T01:29:34.777 回答