C# 文字长值
为什么在这一端有L,我知道它是一个文本值,但是如果数据类型很长,那么它是必需的吗C# 文字长值,c#,literals,C#,Literals,为什么在这一端有L,我知道它是一个文本值,但是如果数据类型很长,那么它是必需的吗 public const long l = 100000000L; 这会产生什么不同吗 public const long l = 100000000; 两者都将输出相同的IL:a调用int64构造函数:int64(100000000)解释如下。可能主要目的是区分重载方法的long和int参数。2.4.4.2状态: 整数文本的类型确定如下: •如果 literal没有后缀,它有其 值可以表示为:int、uint
public const long l = 100000000L;
这会产生什么不同吗
public const long l = 100000000;
两者都将输出相同的IL:a调用
int64
构造函数:int64(100000000)
解释如下。可能主要目的是区分重载方法的long和int参数。2.4.4.2状态:
整数文本的类型确定如下:
•如果
literal没有后缀,它有其
值可以表示为:int、uint、long、ulong
•如果文字是
以U或U作为后缀,它的值位于这些类型中的第一个
可以表示为:uint、ulong
•如果文字后缀为L或
l、 它具有这些类型中的第一个,在这些类型中,它的值可以是
代表:龙,乌龙
•如果文字后缀为UL,UL,UL,
ul,LU,LU,LU,或LU,属于ulong类型
因此,正在推断L
(“如果文本没有后缀”),因此它不是必需的。您的两个示例将执行完全相同的操作(一旦编译)
那你为什么要用L?例如:
public const long doesNotCompile = 3000000000 * 2;
public const long doesCompile = 3000000000L * 2;
在第一行中,文字(即3000000000
)是uint
(由于2.4.4.2),而在第二行中,它是长的
(同样由于2.4.4.2明确指定)
这意味着编译器将允许doesCompile
进行编译,但不允许doesNotCompile
进行编译。这是因为3000000000*2
太大,无法装入uint
但是对于像你这样的基本用法,它是一个直接的任务——那么是的,它在任何方面都是不需要的。不包括它也没有什么坏处。因为据我所知,它主要改变默认分配的内存量 它还使得在使用隐式类型声明时,编译器知道要使用哪种类型的值引用。(这对您的应用程序可能很重要)
@Camilo链接的问题并没有真正回答这个问题:“如果数据类型是
long
,是否需要L
后缀?”@Cueball在阅读答案后是否更清晰?