可能重复:
为什么会陷入无限循环?
C和C++中,像i = i++
这样的语句行为是未定义的,因为在同一表达式中标量对象值改变了两次而没有介于的序列点。
然而,我认为这种表达式在C#或Java中具有明确定义的行为,因为据我所知,参数的评估是从左到右进行的,并且整个过程中都有序列点。
话虽如此,我期望i = i++
等同于i++
。但事实并非如此。以下程序输出0
。
using System;
class Program
{
static void Main(string[] args)
{
int i = 0;
i = i++;
Console.WriteLine(i);
}
}
你能帮我理解为什么吗?
免责声明: 我完全知道上述结构的行为是否已定义,它们是愚蠢的、无用的、难以阅读的、不必要的,不应该在代码中使用。我只是好奇。