2009-05-28 5 views
3

J'ai téléchargé le SDK Phoenix Juin 2008 (Outils pour les compilateurs) et quand je lis le code de l'échantillon Hello, je me sens vraiment perdu.Quelques questions sur les opérateurs spéciaux que je n'ai jamais vu en code C++

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 Questions: Quel est ce mot-clé ref? Quel est ce signe ^? Que fait-il

protégé:

virtual void 
    Execute 
    (
    Phx::Unit^unit 
) override; 

}; Override est aussi un mot-clé C++? Il est coloré comme tel dans mon Visual Studio. Je veux vraiment jouer avec ce framework, mais ce C++ avancé est vraiment un obstacle en ce moment. Je vous remercie.

Répondre

12

Ce n'est pas du C++ standard, c'est C++/CLI.

+3

Je suppose que c'est pourquoi Sun poursuivre Microsoft il ya des années, pour éviter ce genre de "améliorations" – OscarRyz

+0

à peu près ouais –

+6

Ils ne sont pas des améliorations. Ceci est une langue distincte. Ce n'est pas C++. Microsoft ne prétend pas que c'est C++. C++/CLI est techniquement une bête complètement différente. – jalf

5

Il s'agit d'une extension Microsoft à utiliser avec .NET. Le signe insertion indique un handle à un objet stocké sur le tas géré. Voir Bran Bray's blog pour une bonne description.

5

Il s'agit d'un code C++/CLI écrit pour être exécuté en tant que code managé sous le framework .Net, et non en tant que code C++ normal.

  • ref - cette classe est un type de référence, il est alloué dans le tas géré et sera ramasse-miettes
  • ^- cette variable est une poignée à une instance gérée
  • override - cette méthode remplace la Implémentation de la classe de base
4

Cela ne fait pas partie de la norme C++. Il est C++/CLI, qui est une spécification de langage Microsoft conçu pour remplacer Managed C++:

C++/CLI (Common Language Infrastructure) est la spécification de langage de Microsoft destiné à SUPERSEDE extensions managées pour C++. Entièrement révisé pour simplifier la syntaxe C++ plus ancienne (qui est maintenant obsolète ), il offre beaucoup plus de clarté et de lisibilité de code que que C++ géré. C++/CLI est normalisé par Ecma en tant que ECMA-372. Il est actuellement uniquement disponible dans Visual Studio 2005 et 2008 (également inclus dans les éditions Express ).

Le symbole caret est le C++/CLI équivalent d'un pointeur, comme décrit dans la réponse de Rob Walker à this question:

... le caret est l'équivalent géré d'un * (pointeur) qui, en langage C++/CLI , est appelé un 'handle' pour un 'type de référence' (puisque vous pouvez toujours avoir des pointeurs non gérés). Voir ce overview de Microsoft.

L'utilisation de "ref class X" à la place de la "classe X" familière est discutée dans ce blog post.

Questions connexes