You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:52:19