C# +的一致行为+;C中的运算符#

C# +的一致行为+;C中的运算符#,c#,increment,integer-overflow,C#,Increment,Integer Overflow,应用于C#中long的++运算符的行为在应用于long.MaxValue时是否一致?调用不是在选中的块内进行的。我需要知道,在任何情况下,如果您在Visual Studio中使用“检查算术溢出/下溢”编译项目,即使您不在已检查的块中,当前或将来它是否可能抛出溢出异常,而不是包装到long.MinValue(或者使用C#编译器开关),那么默认情况下,您的所有代码都将像在选中的块中一样运行。因此,在这种情况下,您完全可以得到溢出异常。如果您在Visual Studio中使用“检查算术溢出/下溢”编译

应用于C#中long的
++
运算符的行为在应用于
long.MaxValue
时是否一致?调用不是在
选中的
块内进行的。我需要知道,在任何情况下,如果您在Visual Studio中使用“检查算术溢出/下溢”编译项目,即使您不在
已检查的
块中,当前或将来它是否可能抛出
溢出异常
,而不是包装到
long.MinValue

(或者使用C#编译器开关),那么默认情况下,您的所有代码都将像在
选中的
块中一样运行。因此,在这种情况下,您完全可以得到溢出异常。

如果您在Visual Studio中使用“检查算术溢出/下溢”编译项目,即使您不在
选中的
块中(或使用C#编译器开关),则默认情况下,所有代码的行为都将如同在
选中的
块中一样。因此,在这种情况下,您完全可以获得溢出异常。

来自C#语言规范:

对于未包含任何已检查或未检查的运算符或语句的非常量表达式(在运行时计算的表达式),默认溢出检查上下文未检查,除非外部因素(如编译器开关和执行环境配置)调用已检查的计算

来自C#语言规范:

对于未包含任何已检查或未检查的运算符或语句的非常量表达式(在运行时计算的表达式),默认溢出检查上下文未检查,除非外部因素(如编译器开关和执行环境配置)调用已检查的计算


因此,使用
unchecked{u qualifier++}
而不是
{u qualifier++
将是一个更好的解决方案,以防有人在某个时候更改编译器设置?是的,这将确保行为一致。因此使用
unchecked{u qualifier++}
而不是
\u qualifier++;
将是一个更好的解决方案,以防有人在某个时候更改编译器设置?是的,这将确保一致的行为。