我已经下载了2008年6月的Phoenix SDK(编译工具),当我正在阅读Hello示例的代码时,我真的感到迷茫。
public
ref class Hello
{
//--------------------------------------------------------------------------
//
// Description:
//
// Class Variables.
//
// Remarks:
//
// A normal compiler would have more flexible means for holding
// on to all this information, but in our case it's simplest (if
// somewhat inelegant) if we just keep references to all the
// structures we'll need to access as classstatic variables.
//
//--------------------------------------------------------------------------
static Phx::ModuleUnit ^ module;
static Phx::Targets::Runtimes::Runtime ^ runtime;
static Phx::Targets::Architectures::Architecture ^ architecture;
static Phx::Lifetime ^ lifetime;
static Phx::Types::Table ^ typeTable;
static Phx::Symbols::Table ^ symbolTable;
static Phx::Phases::PhaseConfiguration ^ phaseConfiguration;
2个问题:那个ref关键字是什么? 那个标志是什么^?它在做什么
保护:
virtual void
Execute
(
Phx::Unit ^ unit
) override;
};
override也是一个C ++关键字?它在我的Visual Studio中就这样着色了。 我真的很想玩这个框架,但是这个先进的C ++现在确实是一个障碍。谢谢。
答案 0 :(得分:12)
它不是标准的C ++,而是C++/CLI。
答案 1 :(得分:5)
它是用于.NET的Microsoft扩展。插入符表示存储在托管堆上的对象的句柄。有关详细说明,请参阅Bran Bray's博客。
答案 2 :(得分:5)
它是C ++ / CLI - 编写为在.Net框架下作为托管代码运行的代码,而不是常规的C ++代码。
答案 3 :(得分:4)
这不是标准C ++的一部分。它是C++/CLI,这是一种旨在取代Managed C++的Microsoft语言规范:
C ++ / CLI(通用语言 基础设施)是微软的 意图的语言规范 取代C ++的托管扩展。 完全修改以简化 较旧的托管C ++语法(现在是 弃用),它提供了更多 清晰度和代码可读性比 托管C ++。 C ++ / CLI是标准化的 由Ecma作为ECMA-372。目前是 仅适用于Visual Studio 2005 和2008年(也包括在快递中 版本)。
插入符号是指针的C ++ / CLI等价物,如Rob Walker对this question的回答中所述:
......插入符号是管理的等价物 在C ++ / CLI中的*(指针) 术语被称为a的“句柄” '引用类型'(因为你仍然可以 有非托管指针)。看到这个 overview 来自微软。
在blog post中讨论了“ref class X”而不是熟悉的“class X”的用法。