C# +的一致行为+;C中的运算符#
应用于C#中long的C# +的一致行为+;C中的运算符#,c#,increment,integer-overflow,C#,Increment,Integer Overflow,应用于C#中long的++运算符的行为在应用于long.MaxValue时是否一致?调用不是在选中的块内进行的。我需要知道,在任何情况下,如果您在Visual Studio中使用“检查算术溢出/下溢”编译项目,即使您不在已检查的块中,当前或将来它是否可能抛出溢出异常,而不是包装到long.MinValue(或者使用C#编译器开关),那么默认情况下,您的所有代码都将像在选中的块中一样运行。因此,在这种情况下,您完全可以得到溢出异常。如果您在Visual Studio中使用“检查算术溢出/下溢”编译
++
运算符的行为在应用于long.MaxValue
时是否一致?调用不是在选中的块内进行的。我需要知道,在任何情况下,如果您在Visual Studio中使用“检查算术溢出/下溢”编译项目,即使您不在已检查的块中,当前或将来它是否可能抛出溢出异常
,而不是包装到long.MinValue(或者使用C#编译器开关),那么默认情况下,您的所有代码都将像在选中的块中一样运行。因此,在这种情况下,您完全可以得到溢出异常。如果您在Visual Studio中使用“检查算术溢出/下溢”编译项目,即使您不在选中的块中(或使用C#编译器开关),则默认情况下,所有代码的行为都将如同在选中的块中一样。因此,在这种情况下,您完全可以获得溢出异常。来自C#语言规范:
对于未包含任何已检查或未检查的运算符或语句的非常量表达式(在运行时计算的表达式),默认溢出检查上下文未检查,除非外部因素(如编译器开关和执行环境配置)调用已检查的计算
来自C#语言规范:
对于未包含任何已检查或未检查的运算符或语句的非常量表达式(在运行时计算的表达式),默认溢出检查上下文未检查,除非外部因素(如编译器开关和执行环境配置)调用已检查的计算
因此,使用unchecked{u qualifier++}
而不是{u qualifier++
将是一个更好的解决方案,以防有人在某个时候更改编译器设置?是的,这将确保行为一致。因此使用unchecked{u qualifier++}
而不是\u qualifier++;
将是一个更好的解决方案,以防有人在某个时候更改编译器设置?是的,这将确保一致的行为。