Compartilhar via


literal (Extensões de Componentes C++)

Uma variável (membro de dados) é marcada como literal em um /clr compilação é o equivalente nativo de um static const variável.

Todas as plataformas

Comentários

(Não há nenhum comentários para esse recurso de linguagem que se aplicam a todos os tempos de execução.)

Tempo de Execução do Windows

Comentários

(Não há nenhum comentários para esse recurso de linguagem que se aplicam somente ao runtime do Windows.)

5yzft952.collapse_all(pt-br,VS.110).gifRequisitos

Opção de compilador:/ZW

Comentários

Um membro de dados marcados como literaldeve ser inicializado quando declarado e o valor deve ser uma constante integral, enum ou tipo de cadeia de caracteres.Conversão de tipo da expressão de inicialização para o tipo de const dados-membro static deve requerer uma conversão definida pelo usuário.

Nenhuma memória é alocada para o campo literal em tempo de execução; o compilador insere somente seu valor de metadados para a classe.

Uma variável marcada static const não estará disponível nos metadados para outros compiladores.

Para obter mais informações, consulte Estático (C++) e Const (C++).

literalé uma palavra-chave contextual.Consulte Palavras-chave Contextuais (Extensões de Componentes C++) para maiores informações.

Exemplo

Este exemplo mostra que um literal variável implica static.

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

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

O exemplo a seguir mostra o efeito da literal de metadados:

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

Observe a diferença nos metadados de sc e lit: o modopt diretiva é aplicada a sc, que significa que ele pode ser ignorado por outros compiladores.

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

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

O exemplo a seguir, criado em C# referências de metadados criados no exemplo anterior e mostra o efeito da literal e static const variáveis:

// 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);
   }
}

Requisitos

Opção de compilador:/clr

Consulte também

Conceitos

Extensões de componente para plataformas de tempo de execução