在数学中,如果 z = x + y/2
,那么每当我们替换 x
和 y
。每当我们改变 x
和 y
的值时,我们可以在编程中做到这一点而不必专门更新 z
吗?
我的意思是这样的东西行不通,对吧?
int x;
int y;
int z{x + y};
cin >> x;
cin >> y;
cout << z;
如果您对我为什么需要它感到困惑,我希望该变量实时显示,并在 rhs 变量发生更改时自动更新。
就像杀死一个小兵并获得金币一样,显示的净值(现金+自有元素的值(value))会发生变化。或者汽车的速度计会根据您的驾驶速度而变化。
最佳答案
编辑:虽然我完全回答了所提出的问题,但请查看 Artelius ' answer , 也。它解决了我的回答没有解决的一些问题(封装、避免冗余、悬空引用的风险)。 Jonathan Mee 中显示了一个可能的优化,如果计算成本很高。的answer .
你的意思是这样的:
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;
但请注意,仍然有一个函数调用(强制转换运算符的隐式调用),即使它不可见。而且实际上运算符(operator)做了一些真正的计算(而不仅仅是访问一个内部成员),所以隐藏函数调用是否真的是一个好主意是值得怀疑的......
关于c++ - 如何使变量始终等于某些计算的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55402807/