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

prostředí 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 Static (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

Rozšíření komponent pro platformy běhového prostředí