在数学中,如果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(使用前将#替换为@)