Condividi tramite


literal (C++/CLI)

Una variabile (membro dati) contrassegnata come literal in una /clr compilazione è una costante in fase di compilazione. È l'equivalente nativo di una variabile C# const .

Tutte le piattaforme

Osservazioni:

Non esistono note per questa funzionalità del linguaggio che si applichino a tutti i runtime.

Windows Runtime

Osservazioni:

Non esistono note per questa funzionalità del linguaggio che si applichino solo a Windows Runtime.

Common Language Runtime

Osservazioni:

Un membro dati contrassegnato come literal deve essere inizializzato quando dichiarato. E il valore deve essere un tipo integrale, enumerazione o stringa costante. La conversione dal tipo dell'espressione di inizializzazione al tipo del literal membro dati non può richiedere una conversione definita dall'utente.

Nessuna memoria allocata per il literal campo in fase di esecuzione. Il compilatore inserisce solo il valore nei metadati per la classe . Il literal valore viene considerato come costante in fase di compilazione. L'equivalente più vicino in C++ standard è constexpr, ma un membro dati non può trovarsi constexpr in C++/CLI.

Una variabile contrassegnata come literal diversa da una variabile contrassegnata da static const. Un static const membro dati non è reso disponibile nei metadati per altri compilatori. Per altre informazioni, vedere static e const.

literal è una parola chiave sensibile al contesto. Per altre informazioni, vedere Parole chiave sensibili al contesto.

Esempi

Questo esempio mostra che una literal variabile implica static.

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

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

L'esempio seguente illustra l'effetto di literal 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: la direttiva modopt viene applicata a sc, cioè può essere ignorata dagli altri compilatori.

.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x00000001)
.field public static literal int32 lit = int32(0x00000000)

L'esempio seguente, creato in C#, fa riferimento ai metadati creati nell'esempio precedente e mostra l'effetto di literal e static const le 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

Vedi anche

Estensioni componenti per .NET e UWP