C++ 关于特殊算子i';我从来没有见过C++;代码

C++ 关于特殊算子i';我从来没有见过C++;代码,c++,syntax,c++-cli,C++,Syntax,C++ Cli,我已经在2008年6月下载了Phoenix SDK(编译器工具),当我阅读Hello示例的代码时,我真的感到很失落 public ref class Hello { //-------------------------------------------------------------------------- // // Description: // // Class Variables. // // Remarks: // // A normal compiler wou

我已经在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;
})

超越也是C++关键字吗?在我的VisualStudio中,它是这样着色的。
我真的很想玩这个框架,但这个高级C++现在真的是一个障碍。谢谢。

< P>这不是标准C++,是.< /p> < p>这是微软与.NET一起使用的扩展。插入符号表示存储在托管堆上的对象的句柄。请参阅Blog,以描述一个很好的描述。

< P> >是C++或CLI代码,它被写为.NET框架下托管代码的运行,而不是常规C++代码。
  • ref-此类是引用类型,在托管堆中分配,并将被垃圾收集
  • ^-此变量是托管实例的句柄
  • 重写-此方法重写基类实现

不是标准C++的一部分。它是Microsoft语言规范,旨在取代:

C++/CLI(公共语言) 基础设施)是微软的 语言规范旨在 取代C++的托管扩展。 完全修改以简化 旧的管理C++语法(现在是 不推荐),它提供了更多 清晰度和代码可读性比 管理C++。C++/CLI是标准化的 Ecma将其命名为Ecma-372。现在是 仅在VisualStudio2005中可用 和2008年(也包括在快递中) 版本)

插入符号是相当于指针的C++/CLI,如Rob Walker对以下问题的回答中所述:

…插入符号是等效的托管符号 在C++/CLI中 术语被称为一种语言的“句柄” “引用类型”(因为您仍然可以 具有非托管指针)。看到这个了吗 来自微软


本文讨论了“ref class X”而不是熟悉的“class X”的用法。

我想这就是为什么多年前Sun起诉Microsoft,为了防止这种“增强”,它们不是增强。这是一种独立的语言。它不是C++。微软并不声称它是C++。C++和CLI在技术上是完全不同的。C++中的C++和CLI在命名方面有类似的相似性,比如java和javascript。扩展是.CPP,我完全期待看到C++代码:(谢谢所有的答案!)您提到的增强功能可以在C#和Java之间的差异中找到。问题中的C++/CLI功能(如
ref
^
)是本机代码(纯C++)和托管代码(扩展)之间的桥梁并确保在原生/纯C++和托管代码之间没有歧义,从而得到新的关键字和运算符。请参阅完整的说明/理由。