c++ - 如何在 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
解决方案
您要求的内容是不可行的,因为您无法引用表达式。将表达式的结果保存*r1 - *r2
到s
变量中后,您必须*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
推荐阅读
- babeljs - regeneratorRuntime 未在 vue-cli 现代构建中的块供应商处定义
- scala - Scala 文档中的这个代码块有意义吗?
- google-sheets - 满足两个条件显示另一页的列
- arrays - 尝试使用非常数整数对数组进行切片时,Vivado 出现问题
- typescript - 在 VSCode 的 javascript/typescript 项目中的 JSDoc 注释中编写多行代码的正确方法是什么?
- python - 为拖放的对象编写欧拉积分器
- c# - 动态 CRM 的 aspx 页面中的用户“NT AUTHORITY\ANONYMOUS LOGON”错误登录失败
- express - 如何在基于 NUXT + EXPRESS 的项目中减小 vendor.js 的大小?
- javascript - 如何附加整个 HTML 集合
- database - 在mac中更改mongo db的位置