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