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