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 constpromě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 literalstatic 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

Viz také

Přípony komponent pro .NET a UPW