literal
(C++/CLI)
Proměnná (datový člen) označená jako literal
v /clr
kompilaci je konstanta kompilačního času. Jedná se o nativní ekvivalent proměnné jazyka C# const
.
Všechny platformy
Poznámky
(Pro tuto funkci jazyka neexistují žádné poznámky, které platí pro všechny moduly runtime.)
prostředí Windows Runtime
Poznámky
(Pro tuto funkci jazyka neexistují žádné poznámky, které platí pouze pro prostředí Windows Runtime.)
CLR (Common Language Runtime)
Poznámky
Datový člen označený jako literal
musí být inicializován při deklaraci. Hodnota musí být konstantní celočíselný, výčtový nebo řetězcový typ. Převod z typu inicializačního výrazu na typ datového literal
členu nemůže vyžadovat převod definovaný uživatelem.
Pro pole za běhu není přidělena literal
žádná paměť. Kompilátor vloží jeho hodnotu pouze do metadat třídy. Hodnota literal
je považována za konstantu kompilačního času. Nejbližším ekvivalentem v jazyce Standard C++ je constexpr
, ale datový člen nemůže být constexpr
v jazyce C++/CLI.
Proměnná označená jako literal
odlišná od jedné označené static const
proměnné . static const
Datový člen není zpřístupněný v metadatech jiným kompilátorům. Další informace najdete v tématech static
a const
.
literal
je kontextově citlivé klíčové slovo. Další informace najdete v tématu Klíčová slova citlivá na kontext.
Příklady
Tento příklad ukazuje, že proměnná literal
znamená static
.
// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
literal int i = 4;
};
int main() {
int value = X::i;
}
Následující ukázka ukazuje účinek literal
v metadatech:
// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
literal int lit = 0;
static const int sc = 1;
};
Všimněte si rozdílu v metadatech pro sc
a lit
: direktiva modopt
je použita na sc
, což znamená, že lze ignorovat jinými kompilátory.
.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x00000001)
.field public static literal int32 lit = int32(0x00000000)
Následující ukázka, která je vytvořená v jazyce C#, odkazuje na metadata vytvořená v předchozí ukázce a ukazuje účinek proměnných literal
static const
:
// 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);
}
}
Požadavky
Možnost kompilátoru: /clr