Sdílet prostřednictvím


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.)

5yzft952.collapse_all(cs-cz,VS.110).gifPož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

Viz také

Koncepty

Součást rozšíření pro Runtime platformy