Mud*_*ain 1 .net c# undefined-behavior pre-increment post-increment
我知道下面的代码会导致根据c/c ++标准的未定义行为但是在c#中呢?,经过一些搜索,我发现在c#中,表达式中的所有参数/变量都是从左到右计算的(如果错误请纠正我),如果这是真的,那么下面程序的结果(res变量的输出)应该是3,但它的4 ??
class Program
{
static void Main(string[] args)
{
int a = 1;
int res = (a++) + (++a); //Will This Lead to Undefined Behavior(Like in C/C++)..??
Console.WriteLine(res);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
当使用从左到右的评估检查时,结果适用于这些表达式.
res = a + ++a; \\Successfully evaluates res to 3
res = ++a + a; \\Sussessfully evaluates res to 4
res = ++a + a++; \\Successfully evaluates res to 4
同样
res= a++ + ++a ;\\should be 3, why i get it 4 ??
任何人都可以解释我的困惑.
您的计划相当于:
var a = 1;
var temp0 = a++;
var temp1 = ++a;
var res = temp0 + temp1;
Run Code Online (Sandbox Code Playgroud)
结果就是这样4.
更简单:
var a = 1;
var temp0 = a; a++;
a++; var temp1 = a;
var res = temp0 + temp1;
Run Code Online (Sandbox Code Playgroud)
C#没有像C/C++那样的未定义行为.这会破坏.NET的安全属性.那说.NET可以并且确实在几个地方有实现定义的行为.不过这里不是.
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |