当前位置: 首页 > news >正文

C++ 如何在一个方法中返回多个不同类型的数据

使用输出参数

最简单,最传统的方式就是使用引用或指针作为输出参数,如下代码所示:

void getMultipleValues(int& num, std::string& str, double& val) {num = 42;str = "Hello";val = 3.14;
}int main() {int n;std::string s;double d;getMultipleValues(n, s, d);return 0;
}

这种方法要设置参数类型,略显麻烦(不过C语言要实现类似的需求,还是以此方法为主)。

定义结构体

struct Result {int number;std::string text;double value;
};Result getStructuredData() {return {42, "Hello", 3.14};
}int main() {auto result = getStructuredData();int n = result.number;std::string s = result.text;double d = result.value;return 0;
}

这种方法就更麻烦了,不过要返回很多数据时,这个方法能更清晰的表意。

使用tuple

#include <tuple>
#include <string>std::tuple<int, std::string, double> getMultipleValues() {return {42, "Hello", 3.14};
}int main() {// 使用结构化绑定解构auto [num, str, val] = getMultipleValues();// 或者使用 std::get 访问auto t = getMultipleValues();int n = std::get<0>(t);std::string s = std::get<1>(t);double d = std::get<2>(t);return 0;
}

这种方法我认为是最简单,最直观的,而且你也可以显示忽略掉某个值:

auto [num, _, __] = getMultipleValues();
auto [_, str, ___] = getMultipleValues();

_ 是常用的占位符(只是命名习惯,任何未使用的变量名都可以)。占位符变量不会分配存储空间,编译器会优化掉未使用的部分。

如果你需要将值绑定到已有变量,可以使用std::tie:

int n;
std::string s;
std::tie(n, s, std::ignore) = getMultipleValues();

根据条件确定返回值

#include <variant>
#include <string>std::variant<int, std::string> getDynamicValue(bool condition) {if (condition) return 42;return "Hello";
}int main() {auto v = getDynamicValue(true);if (std::holds_alternative<int>(v)) {int n = std::get<int>(v);} else {std::string s = std::get<std::string>(v);}return 0;
}

std::holds_alternative(v)这个方法用于检查 std::variant 对象当前是否持有特定类型的值。

你也可以用get_if方法来替代上述方法(这个方法更简洁,更直观):

if (auto ptr = std::get_if<int>(&v)) {std::cout << "Holds int: " << *ptr << std::endl;
}

http://www.xdnf.cn/news/329131.html

相关文章:

  • [D1,2] 贪心刷题
  • 深入剖析GoFrame日志模块:优势、特色与项目实践经验分享
  • 不同大模型对提示词和问题的符号标识
  • C++:买房子
  • 手动写一个vuex的可持续化插件
  • MySQL的行级锁锁的到底是什么?
  • [Windows] Ghost Downloader v3.5.9 开源多线程下载工具
  • Qt开发经验:回调函数的线程归属问题及回调函数中更新控件的问题
  • css识别\n换行
  • SEO关键词与长尾词精准布局策略
  • 海外短剧H5系统开发:技术架构、SEO优化与全球市场突围策略 [2025版]
  • 通过vllm部署qwen3大模型以及基于 vLLM 的 OpenAI 兼容 API 接口调用方法总结
  • Yocto Project概念(一)
  • 外包团队协作效率低,如何优化
  • AI 大模型新浪潮:从 DeepSeek-Prover 到 Qwen3,再到 DeepSeek-R2,迈向自动推理的新时代20250507
  • (四)Java逻辑运算符和位运算符全面解析
  • spring的事件监听
  • 【Machine Learning Q and AI 读书笔记】- 05 利用数据减少过拟合现象
  • 【JAVA】BigDecimal判断是否为0, / by zero的问题修复
  • leetcode 2395. Find Subarrays With Equal Sum
  • MySQL 数据备份与恢复
  • Nginx篇之限制公网IP访问特定接口url实操
  • QUIC协议优化:HTTP_3环境下的超高速异步抓取方案
  • Qt重写相关事件,原来的默认功能是不是丢失了?
  • FFmpeg(7.1版本)编译生成ffplay
  • AI Agent(5):多Agent协作系统
  • 5.6-DAE实现
  • 背单词软件开发英语app开发,超级单词表开发,河南数匠软件开发
  • 数据结构之栈与队列
  • QT6 源(83)篇二:日期类型 QDate 的源代码,及功能测试:日期与字符串互相转换时候的格式指定,