首页 > 解决方案 > 如何使 C++ 编译器遵循 C# 在 this 赋值语句中的相同优先级、关联性和求值顺序?

问题描述

考虑以下代码:

int x = 1;
int y = 2;
y = x + (x = y);

当它在 C# 中运行时,变量最终分配有以下值:

x = 2

y = 3

另一方面,当它在 C++ 中运行时,变量的结尾是这样的:

x = 2

y = 4

显然,C++ 编译器使用与 C# 不同的优先级关联性评估规则顺序(如Eric Lippert 的这篇文章中所述)。

所以,问题是:

是否可以重写赋值语句以强制 C++ 评估与 C# 相同的值?

唯一的限制是将其保持为单线。我知道这可以通过将分配分成两行来重写,但目标是将其保持在一行中。

标签: c#c++evaluationoperator-precedenceassociativity

解决方案


是的,确实有可能。

x = (y+=x) - x;

很简单。


推荐阅读