checked 和 unchecked 是 C# 中控制整数溢出检查的关键字:默认编译时常量表达式启用检查(报错),运行时变量运算不检查(静默回绕);checked 在运行时触发 OverflowException,unchecked 显式禁用检查(含常量),二者均不影响浮点数、decimal 及其他异常。

checked 和 unchecked 是 C# 中用于控制整数算术运算是否启用溢出检查的关键字,它们只影响编译时和运行时的整数类型(int、long、short、byte 等)溢出行为,对浮点数或 decimal 无效。
什么时候会触发溢出检查?
默认情况下,C# 在 编译时的常量表达式 中启用溢出检查(即编译器会报错),但在 运行时的变量运算 中默认不检查(静默溢出)。例如:
-
int x = int.MaxValue + 1;→ 编译错误(常量溢出) -
int y = int.MaxValue; int z = y + 1;→ 编译通过,运行时 z =int.MinValue(回绕,无异常)
用 checked 启用运行时溢出检查
在可能溢出的代码块或表达式前加 checked,一旦发生溢出就抛出 System.OverflowException:
-
checked { int x = int.MaxValue + 1; }→ 运行时报异常 -
int result = checked(a * b + c);→ 对整个表达式启用检查 - 适合金融计算、安全敏感逻辑等不能容忍静默回绕的场景
用 unchecked 禁用溢出检查(包括常量)
unchecked 可显式关闭检查,让常量溢出也能通过编译,并确保运行时也不抛异常:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~