c# - 如何使 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# 相同的值?
唯一的限制是将其保持为单线。我知道这可以通过将分配分成两行来重写,但目标是将其保持在一行中。
解决方案
是的,确实有可能。
x = (y+=x) - x;
很简单。
推荐阅读
- python - 为什么我的 Python 代码在此位置显示“无”?
- java - 从图库中挑选图像并将其保存到我的应用数据文件夹 - ANDROID
- ruby-on-rails - Rails 5 gem'delayed_job_active_record'未初始化的常量作业
- laravel - 在 null 上调用成员函数 checkLearning()(查看:
- c# - 统一按钮切换颜色
- r - 返回一个小标题:如何使用 case_when 进行矢量化?
- python - 这个 python for 循环实际上在做什么
- stata - 缩短变量的所有值标签
- mysql - 一对多关系如何在spring boot中保存数据
- android - Android:使用圆形锚定 FAB 向 BottomAppBar 添加圆角