Поделиться через


literal (расширения компонентов C++)

Переменной (член данных) помечен как literal в /clr компиляции эквивалентен собственный static const переменной.

Все платформы

Заметки

(Существуют без примечания для этого компонента языка, которые применяются для всех сред.)

Среда выполнения Windows

Заметки

(Существуют без примечания для этого компонента языка, которые применяются только во время выполнения Windows).

5yzft952.collapse_all(ru-ru,VS.110).gifТребования

Параметр компилятора:/ZW

Заметки

Член данных помечены как literalдолжны быть инициализированы при объявлении и значение должны быть целые константы, перечисления или строковый тип.Преобразование из типа выражения инициализации типа static const-член данных не должны требовать определенное пользователем преобразование.

Память не выделяется для буквенного поля во время выполнения; Компилятор вставляет только те его значение в метаданных для класса.

Переменные, помеченные как static const не будут доступны в метаданных для других компиляторов.

Дополнительные сведения см. в разделах Статический (C++) и const (C++).

literalЭто контекстная ключевое слово.Дополнительные сведения см. в разделе Контекстные ключевые слова (расширения компонентов C++).

Пример

Этот пример показывает, что literal подразумевает переменной static.

// mcppv2_literal.cpp
// compile with: /clr
ref struct X {
   literal int i = 4;
};

int main() {
   int value = X::i;
}

В следующем примере демонстрируется влияние литерал в метаданных:

// mcppv2_literal2.cpp
// compile with: /clr /LD
public ref struct A {
   literal int lit = 0;
   static const int sc = 1;
};

Обратите внимание на разницу в метаданных для sc и lit: modopt директива применяется к sc, то есть он может быть пропущено другими компиляторами.

.field public static int32 modopt([mscorlib]System.Runtime.CompilerServices.IsConst) sc = int32(0x0000000A)

.field public static literal int32 lit = int32(0x0000000A)

Следующий пример, в C# ссылки на метаданные, созданные в предыдущем примере и показывает влияние 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);
   }
}

Требования

Параметр компилятора:/clr

См. также

Основные понятия

Расширения компонентов для платформ среды выполнения