首页 > 解决方案 > 如何在 C++ 中将引用/指针与数学运算一起使用?

问题描述

我对 C++ 指针和引用很陌生。假设我有两个变量 i1 和 i2,有没有办法可以跟踪它们的差异(或任何其他操作),即使其中一个发生变化。我的尝试如下所示,以及我想要实现的目标。

int i1 = 20;
int i2 = 20;
int*r1 = &i1;
int*r2 = &i2;
int s  = *r1-*r2;
std::cout << s << std::endl;
i1 = 40;
std::cout << s << std::endl;
//OUTPUT
//0 <- 20-20
//0 <- How do I make this 20, since 40-20 is 20

标签: c++

解决方案


您要求的内容是不可行的,因为您无法引用表达式。将表达式的结果保存*r1 - *r2s变量中后,您必须*r1 - *r2在更新源值后再次执行表达式以将新结果保存到s中,例如:

int  i1 = 20;
int  i2 = 20;
int *r1 = &i1;
int *r2 = &i2;
int  s  = *r1 - *r2;
std::cout << s << std::endl;
i1 = 40;
s = *r1 - *r2; // <-- ADD THIS!
std::cout << s << std::endl;
//OUTPUT
//0 <- 20-20
//20 <- 40-20

现场演示

对于您正在尝试的内容,您可以考虑改用lambda,让它捕获对原始变量的引用,然后您可以在需要时调用 lambda,以便它每次都可以计算新结果,例如:

int i1 = 20;
int i2 = 20;
auto s = [&]{ return i1 - i2; };
std::cout << s() << std::endl;
i1 = 40;
std::cout << s() << std::endl;
//OUTPUT
//0 <- 20-20
//20 <- 40-20

现场演示


推荐阅读