c++ - 回想一下变量的先前值?

标签 c++ c++17

我对C++有点陌生,我讨厌在需要将先前值存储在另一个变量中的情况下运行。所以我的问题是,我是否可以使变量在某种意义上存储两个值。我希望我能够调用以前存储的值并将其用于其他功能。
例如)
目前的方式

int x1 = 5;
int x2 = x1 + 5;
int diff = x2 - x1;
我想做的事
int x = 5;
x = x + 5;
int diff = x - old_x;

最佳答案

这是一个适合您特定用例的最小类:

struct Int {
    int val = 0, old_val = 0;
    Int(int i) : val(i) {}
    operator int() { return val; }
    void operator=(int i) { old_val = std::exchange(val, i); }
    int old() { return old_val; }
};
您可以像这样使用它:
Int x = 5;
x = x + 7;
int diff = x - x.old();  // diff is 7
这是demo
请注意,此类非常少,在实践中,您将希望使Int模型尽可能接近int,而仅具有记住先前值的附加属性。

关于c++ - 回想一下变量的先前值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63861179/

相关文章:

c++ - 为什么非成员静态 constexpr 变量不隐式内联?

c++ - std::可选 - 使用 {} 或 std::nullopt 构造空?

c++ - 对于 C++17 中的非标准布局类, `offsetof` 为 "conditionally-supported"是什么意思?

c++ - Qt Creator 如何采集外部串口设备的实时数据?

c++ - 分配器感知 `std::array` 风格的容器?

c++ - 意外丢失隐式声明的复制/移动构造函数

c++ - 我如何获得一个模板来支持 T* 而不是 T&?

已调用 C++ 默认构造函数

java - 在递归中使用 += 在 Java 和 C++ 中产生不同的结果

c++ - ofxFaceTracker(开放框架)示例的问题