【发布时间】:2014-05-07 23:48:11
【问题描述】:
我有一个简单的代码 sn-ps,它在使用 C++ 编译器和 C# 编译器构建时显示不同的行为。
C#
static void Main(string[] args)
{
int i = 0;
i += i++;
Console.WriteLine(i);
Console.ReadLine();
}
i 的结果是0。
从此链接复制。 For i = 0, why is (i += i++) equal to 0?
C++
int main()
{
int i = 0;
i += i++;
cout << i << endl;
}
i 的结果是1。
我只是想知道为什么C#和C++的代码输出会有差异。
【问题讨论】:
-
因为该表达式是未定义的行为。另一个 C++ 编译器(或另一个版本)可能会给出另一个结果。
-
@Adriano:对于 C#,它不是未定义的。
-
我的猜测是 C++ 首先评估部分“i++”,它是一,然后评估 i+= XXX
-
因为是两种不同的语言?
-
这是由于 C# 处理后增量的方式;后自增运算符加一,并返回旧值。如果您将其更改为
++i,您将获得您的1;-)
标签: c# c++ operator-precedence