literal (rozšíření komponent C++)
Proměnné (datový člen) označen jako literal v /clr kompilace je ekvivalentem nativní static const proměnné.
Všechny platformy
Poznámky
(Nejsou žádné poznámky pro tuto funkci jazyka, které platí pro všechny knihovny runtime.)
Windows Runtime
Poznámky
(Nejsou žádné připomínky k této funkci jazyka se Windows Runtime.)
Požadavky
Volba kompilátoru:/ZW
Poznámky
Datový člen označen jako literalmusí být inicializována při deklaraci a hodnota musí být konstantní integrál, výčtu nebo typ řetězec.Převod z typu inicializační výraz typu statické const členských dat uživatelem definovaný převod nesmí vyžadovat.
Přidělení paměti pro pole literálu běhu; Kompilátor vloží pouze hodnotu metadat pro třídu.
Proměnné označené static const nebudou k dispozici v metadatech pro další zpracovatele.
Další informace naleznete v tématu Statické (C++) a Const (C++).
literalje kontextová klíčové slovo.Další informace naleznete v tématu Kontextově závislá klíčová slova (rozšíření komponent C++).
Příklad
Tento příklad ukazuje, že literal proměnná zahrnuje static.
// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
literal int i = 4;
};
int main() {
int value = X::i;
}
Následující příklad ukazuje vliv literál metadat:
// 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 metadata sc a lit: modopt směrnice platí pro sc, znamená, že ji lze ignorovat podle jiných kompilátorů.
.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x0000000A)
.field public static literal int32 lit = int32(0x0000000A)
V následující ukázce vytvořené v jazyce C# odkazuje na metadata vytvořený v předchozí ukázce a zobrazuje vliv literal a static const proměnných:
// 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
Volba kompilátoru:/clr