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,一旦发生溢出就抛出 System.OverflowException:
checked { int x = int.MaxValue + 1; } → 运行时报异常int result = checked(a * b + c); → 对整个表达式启用检查unchecked 可显式关闭检查,让常量溢出也能通过编译,并确保运行时也不抛异常:
unchecked { int x = int.MaxValue + 1; } → 编译通过,x = int.MinValue
int x = unchecked(int.MaxValue + 1); → 同上,表达式级写法C# 默认是“运行时不检查”,但可通过编译器选项 /checked+ 或项目文件中设置 <checkforoverflowunderflow>true</checkforoverflowunderflow> 全局开启运行时检查。不过更推荐按需使用 checked/unchecked 块,保持意图明确、粒度可控。注意:它们不影响引用类型或非整数类型,也不改变除法零异常等其他异常行为。
基本上就这些 —— 简单但容易忽略的底层控制机制。
以上就是C# checked和unchecked关键字 - 控制整数溢出检查的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号