Condividi tramite


valore letterale (Estensioni del componente C++)

Una variabile (membro dati) contrassegnato come literal in un /clr compilazione è l'equivalente nativo di un static const variabile.

Tutte le piattaforme

Note

(Non esistono note per questa funzionalità di linguaggio che si applicano a tutti i Runtime).

Windows Runtime

Note

(Non esistono note per questa funzionalità di linguaggio che si applicano solo alla fase di esecuzione di Windows).

5yzft952.collapse_all(it-it,VS.110).gifRequisiti

Opzione del compilatore:/ZW

Note

Un membro di dati contrassegnato come literaldeve essere inizializzato quando viene dichiarato e il valore deve essere una costante integrale, enum o tipo di stringa.Conversione dal tipo di espressione di inizializzazione per il tipo di static const-membro dati non deve richiedere una conversione definita dall'utente.

Non viene allocata memoria per il campo del valore letterale in fase di esecuzione; il compilatore inserisce solo il valore nei metadati della classe.

Una variabile contrassegnata come static const non è disponibile nei metadati in altri compilatori.

Per ulteriori informazioni, vedere Statica (C++) e const (C++).

literalè una parola chiave sensibile al contesto.Per ulteriori informazioni, vedere Parole chiave sensibili al contesto (Estensioni del componente C++).

Esempio

In questo esempio viene illustrato che un literal variabile implica static.

// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
   literal int i = 4;
};

int main() {
   int value = X::i;
}

Nell'esempio riportato di seguito mostra l'effetto di testo letterale nei metadati:

// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
   literal int lit = 0;
   static const int sc = 1;
};

Si noti la differenza nei metadati per sc e lit: il modopt direttiva viene applicata a sc, vale a dire può essere ignorato da altri compilatori.

.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x0000000A)

.field public static literal int32 lit = int32(0x0000000A)

Nell'esempio seguente, scritto in c#, fa riferimento a metadati creato nell'esempio precedente e Mostra l'effetto di literal e static const variabili:

// mcppv2_literal3.cs
// compile with: /reference:mcppv2_literal2.dll
// A C# program
class B {
   public static void Main() {
      // OK
      System.Console.WriteLine(A.lit);
      System.Console.WriteLine(A.sc);

      // C# does not enforce C++ const
      A.sc = 9;
      System.Console.WriteLine(A.sc);

      // C# enforces const for a literal
      A.lit = 9;   // CS0131

      // you can assign a C++ literal variable to a C# const variable
      const int i = A.lit;
      System.Console.WriteLine(i);

      // but you cannot assign a C++ static const variable
      // to a C# const variable
      const int j = A.sc;   // CS0133
      System.Console.WriteLine(j);
   }
}

Requisiti

Opzione del compilatore:/clr

Vedere anche

Concetti

Estensioni componenti per le piattaforme runtime