可能显示的文件:
Why does this go into an infinite loop?i = i ++不增加i。为什么?
比如像i = i++
具有在C和C++未定义的行为,因为标量对象的值是变化的两倍相同的表达内,而不插入序列点。
但是我想这些表达式在C#或Java中有明确定义的行为,因为AFAIK参数的评估是从左到右,并且有全部的序列点。
也就是说,我期望i = i++
相当于i++
。但事实并非如此。以下程序输出0
。
using System;
class Program
{
static void Main(string[] args)
{
int i = 0;
i = i++;
Console.WriteLine(i);
}
}
你能帮我理解为什么吗?
免责声明: 我充分认识到,无论是否上述结构的行为定义,他们是愚蠢的,无用的,不可读的,不必要的,不应该在代码中使用。我只是好奇。
@Downvoter:留下评论? –
他们通常不会:) – Tigran
这是去年有关Java的问题,但在C#中回答(这两个工作同样适用于这种情况):http://stackoverflow.com/questions/3831341/why-does-this-go- into-an-infinite-loop – BoltClock