以下两个语句将导致编译器溢出错误(原因是常量表达式默认会检查溢出):
但是,如果编译器能够确定将这两个值相加会导致溢出,为什么它不将
int i=(int)(int.MaxValue+100); // error
long l=(long)(int.MaxValue+100); // error
但是,如果编译器能够确定将这两个值相加会导致溢出,为什么它不将
int.MaxValue
和100
促升为long
,然后再尝试将它们加在一起呢?据我所知,这应该不是问题,因为根据以下引用,整数字面量也可以是long
类型:
谢谢。当整数字面量没有后缀时, 它的类型是这些类型中的第一个 其中它的值可以被表示:int、uint、long、ulong。