文本(C++ 组件扩展)
变量 (数据成员) 标记为literal在**/clr**编译为本机相当于static const变量。
所有平台
备注
(有此语言功能没有适用于所有的运行库的说明。
Windows 运行时
备注
(有此语言功能没有适用于仅 Windows 运行库的说明。
要求
编译器选项:/ZW
备注
数据成员标记为literal必须在声明时初始化和值必须是整数常数、 枚举类型或字符串类型。初始化表达式的类型转换为静态常量数据成员的类型必须要求用户定义的转换。
在运行时 ; 在文本字段会不分配任何内存 编译器只在类的元数据中插入它的值。
标记为一个变量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