关于我在C ++代码中从未见过的特殊运算符的一些问题

时间:2009-05-28 23:24:08

标签: c++ syntax c++-cli

我已经下载了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 ++现在确实是一个障碍。谢谢。

4 个答案:

答案 0 :(得分:12)

它不是标准的C ++,而是C++/CLI

答案 1 :(得分:5)

它是用于.NET的Microsoft扩展。插入符表示存储在托管堆上的对象的句柄。有关详细说明,请参阅Bran Bray's博客。

答案 2 :(得分:5)

它是C ++ / CLI - 编写为在.Net框架下作为托管代码运行的代码,而不是常规的C ++代码。

  • ref - 此类是引用类型,它在托管堆中分配并将被垃圾回收
  • ^ - 此变量是托管实例的句柄
  • override - 此方法覆盖基类实现

答案 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”的用法。