如何使变量始终等于某些计算的结果?

2024-03-21

在数学中,如果z = x + y / 2, then z每当我们替换 的值时总会改变x and y。我们可以在编程中做到这一点而不必专门更新吗z每当我们改变值时x and y?

我的意思是这样的事情行不通,对吗?

int x;
int y;
int z{x + y};
cin >> x;
cin >> y;
cout << z;

如果您对为什么我需要它感到困惑,我希望实时显示变量,并在 rhs 变量发生更改时自动更新它。

就像杀死一个小兵并获得金币一样,显示的净值(现金+自己物品的价值)也会发生变化。或者汽车的速度表会根据您行驶的速度或速度而变化。


Edit:虽然我完全回答了所提出的问题,但请看一下Artelius https://stackoverflow.com/users/31945/artelius' answer https://stackoverflow.com/a/55412027/1312382, 也。它解决了我的答案没有解决的一些问题(封装、避免冗余、悬空引用的风险)。如果计算成本很高,则可能的优化如下所示乔纳森·米 https://stackoverflow.com/users/2642059/jonathan-mee's answer https://stackoverflow.com/a/55422936/1312382.


你的意思是这样的:

class Z
{
    int& x;
    int& y;
public:
    Z(int& x, int& y) : x(x), y(y) { }
    operator int() { return x + y; }
};

该类延迟结果的计算,直到转换为 int。由于强制转换运算符不明确,Z每当需要 int 时都可以使用。由于存在超载operator<<对于 int,您可以将其与 e 一起使用。 G。std::cout直接地:

int x, y;
Z z(x, y);
std::cin >> x >> y;
if(std::cin) // otherwise, IO error! (e. g. bad user input)
    std::cout << z << std::endl;

但请注意,有still函数调用(强制转换运算符的隐式调用),即使它不可见。实际上,该运算符执行了一些真实的计算(而不仅仅是访问内部成员),因此隐藏函数调用是否真的是一个好主意是值得怀疑的......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使变量始终等于某些计算的结果? 的相关文章

随机推荐