Некоторые вопросы о специальных операторах, которые я никогда не видел в коде C ++ - PullRequest
3 голосов
/ 29 мая 2009

Я скачал Phoenix SDK, июнь 2008 г. (Инструменты для компиляторов), и когда я читаю код примера 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 ++? Это окрашено как таковое в моей Visual Studio. Я действительно хочу поиграть с этим фреймворком, но этот продвинутый C ++ сейчас действительно является препятствием. Спасибо.

Ответы [ 4 ]

12 голосов
/ 29 мая 2009

Это не стандарт C ++, это C ++ / CLI .

5 голосов
/ 29 мая 2009

Это код C ++ / CLI, написанный для запуска в качестве управляемого кода в среде .Net, а не обычный код C ++.

  • ref - этот класс является ссылочным типом, он размещен в управляемой куче и будет собирать мусор
  • ^ - эта переменная является дескриптором управляемого экземпляра
  • override - этот метод переопределяет реализацию базового класса
5 голосов
/ 29 мая 2009

Это расширение Microsoft для использования с .NET. Символ каретки указывает дескриптор объекта, хранящегося в управляемой куче. См. Bran * Bray's блог для хорошего описания.

4 голосов
/ 29 мая 2009

Это не является частью стандартного C ++. Это C ++ / CLI , спецификация языка Microsoft, предназначенная для замены Managed C ++ :

C ++ / CLI (Общий язык Инфраструктура) является Microsoft языковая спецификация предназначена для Заменить управляемые расширения для C ++. Полностью переработан для упрощения старый синтаксис Managed C ++ (который сейчас устарела), это обеспечивает гораздо больше ясность и читаемость кода, чем Управляемый С ++. C ++ / CLI стандартизирован Ecma как ECMA-372. В настоящее время доступно только в Visual Studio 2005 и 2008 (также включены в Экспресс Editions).

Символ каретки является эквивалентом C ++ / CLI указателя, как описано в ответе Роба Уокера на этот вопрос :

... каретка является управляемым эквивалентом * (указатель) который в C ++ / CLI Терминология называется «ручкой» к «тип ссылки» (так как вы все еще можете есть неуправляемые указатели). Видеть это Обзор от Microsoft.

Использование "ref class X" вместо привычного "class X" обсуждается в этом блоге .

...