如何将返回std::pair的函数结果赋值给已声明的两个变量?
替代std::tie的实现方案
以下是几种无需使用std::tie,就能给已声明的x、y赋值的方法:
1. 直接访问pair的成员变量
这是最直观的实现方式,先临时存储函数返回的pair对象,再分别给x和y赋值(避免函数重复调用产生副作用):
int x; int y; if (flag) { auto result = func_that_returns_pair(some args); x = result.first; y = result.second; } else { auto result = func_that_returns_pair(some different args); x = result.first; y = result.second; }
若函数调用无副作用,也可省略临时变量直接访问成员:
if (flag) { x = func_that_returns_pair(some args).first; y = func_that_returns_pair(some args).second; } else { x = func_that_returns_pair(some different args).first; y = func_that_returns_pair(some different args).second; }
2. 利用C++17结构化绑定到引用
虽然不能直接用auto [x, y]复用已声明的变量,但可以绑定到返回pair的引用,再赋值给x、y:
int x; int y; if (flag) { const auto& [rx, ry] = func_that_returns_pair(some args); x = rx; y = ry; } else { const auto& [rx, ry] = func_that_returns_pair(some different args); x = rx; y = ry; }
3. 自定义赋值辅助函数
如果需要多次执行这类赋值操作,可封装一个简单的辅助函数,让代码更简洁:
#include <utility> void assign_to_pair(int& a, int& b, const std::pair<int, int>& pair_val) { a = pair_val.first; b = pair_val.second; } // 使用示例 int x; int y; if (flag) { assign_to_pair(x, y, func_that_returns_pair(some args)); } else { assign_to_pair(x, y, func_that_returns_pair(some different args)); }
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

