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

标签 c++ c++11

在数学中,如果 z = x + y/2,那么每当我们替换 xy。每当我们改变 xy 的值时,我们可以在编程中做到这一点而不必专门更新 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/

相关文章:

c++ - 如何从重载解析中删除函数?

c++ - result_of<F(Args...> 和 decltype<f(args...)> 有什么区别?

c++ - 在当前 Linux 发行版上打包 C++11 软件是否安全?

Javascript 客户端 C++ 服务器游戏

c++ - 简单 C++ 代码中的段错误

c++ - Visual C++ 2008 Express Edition 创建新项目时出错

c++ - 获取当前在 C++ 中设置的全局语言环境?

c++ - 是否可以并行化这个 for 循环?

c++ - 为什么不允许在 const 非 volatile 成员函数上消除公共(public)子表达式?

c++ - 具有多个容器的循环范围