字面值

时间:2018-12-04 12:10:26

标签: c# literals

为什么我们到此为止都有L,我知道这是一个字面值,但是如果数据类型仍然很长,那么是否需要它?

public const long l = 100000000L;

这会产生什么不同吗?

public const long l = 100000000;

4 个答案:

答案 0 :(得分:1)

spec中的2.4.4.2:

  

整数文字的类型确定如下:

     

•如果   字面量没有后缀,它具有这些类型中的第一个,   值可以表示为:int,uint,long,ulong。

     

•如果文字是   以U或u为后缀,它是其中第一个类型,其值   可以表示为:uint,乌龙。

     

•如果文字后缀为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),而在第二行中,则是long(同样由于2.4 .4.2-由于已明确指定。)

这意味着编译器将允许doesCompile进行编译,但不会允许doesNotCompile进行编译。 这是因为3000000000 * 2太大而无法放入uint内。

但是对于基本用法(如您的用法)来说,它是直接分配的-那么是的,它不需要任何方式。不包括它也没有不利之处。

答案 1 :(得分:0)

两者都将输出相同的IL:调用int64构造函数:int64(100000000)

答案 2 :(得分:-1)

它的解释是here。可能的主要目的是区分重载方法的long和int参数。

答案 3 :(得分:-1)

据我所知,它通常会更改默认情况下分配的内存量。

使用隐式类型声明时,编译器也知道要使用哪种类型的值引用。 (这可能对您的应用很重要)

enter image description here

enter image description here