将int.MaxValue分配给变量时,编译器的响应不同

盖伊

根据文档, int.MaxValue是一个int字段。当我做

int a = int.MaxValue;
int b = a + 1;

b具有int.MinValue预期的值但是当我这样做

int a = int.MaxValue + 1;

我收到编译错误

该操作在检查模式下的编译时溢出

为什么有区别?

Xanatos

https://msdn.microsoft.com/zh-cn/library/aa691319(v=vs.71).aspx

常量表达式是可以在编译时完全求值的表达式。

只要表达式是上面列出的类型之一并且仅包含上面列出的构造,表达式就在编译时进行评估。

除非将常量表达式显式放置在未经检查的上下文中,否则在表达式的编译时求值过程中在整型算术运算和转换中发生的溢出总是会导致编译时错误

因此,这解释了为什么int a = int.MaxValue + 1;给出编译错误(int.MaxValueconst int)。

int a = int.MaxValue;
int b = a + 1;

有所不同,因为它不是常量表达式。它们是两个非const变量(请参阅和仅包含上面列出的结构?显然声明中间变量不是可接受的结构之一:-))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将int.MaxValue分配给变量时,在编译时没有溢出错误

编译器如何将内存地址分配给变量?

Typescript 编译器允许将 JSON 对象分配给类型化的类变量

为什么编译器允许将Convert.ToString()分配给整数?

将`nullptr`分配给`bool`类型。哪个编译器正确?

为什么可以将寄存器数组名称分配给指针变量而不会发生编译器错误?

编译错误:尝试将数组分配给数组时,从不兼容的类型“char”分配给“int”

将字符串文字分配给非const指针时,为什么我的C编译器没有警告?

为什么我可以将一个Int分配给一个没有编译器错误的字符串?

将临时变量分配给变量时异步函数的不同行为

将类类型分配给泛型变量时,Typescript编译错误

为什么将短变量分配给Integer引用会产生编译时错误?

将int分配给数组时出现分段错误

无法将ws响应分配给$ scope变量

将 GET 响应分配给范围变量

将Integer类型分配给int

将int值分配给char

将向量分量分配给Julia中的不同变量

将扫描器对象分配给变量时,程序崩溃

当我将迭代器分配给变量时发生了什么

将拆分的值分配给多个变量时,有什么方法可以将拆分的input()值转换为int?

为什么看起来像将int分配给int *时此分配是正确的?

将变量分配给HTML选择器,类

检查属性时无法将组件分配给变量

将终端命令分配给bash变量时出错

将IIFE分配给变量时,IIFE如何工作?

尝试将IntVar()分配给变量时获取AttributeError

无法将类型“ Int”的值分配给类型“ Int?”

无法将类型为Int的变量分配给定义为Int的枚举