从 C 函数返回多个值

新手上路,请多包涵

是否有从 C++ 函数返回多个值的首选方法?例如,假设一个函数将两个整数相除并返回商和余数。我经常看到的一种方法是使用参考参数:

 void divide(int dividend, int divisor, int& quotient, int& remainder);

一种变体是返回一个值并通过引用参数传递另一个值:

 int divide(int dividend, int divisor, int& remainder);

另一种方法是声明一个结构以包含所有结果并返回:

 struct divide_result {
    int quotient;
    int remainder;
};

divide_result divide(int dividend, int divisor);

通常首选这些方法之一,还是有其他建议?

编辑:在现实世界的代码中,可能有两个以上的结果。它们也可能是不同的类型。

原文由 Fred Larson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 667
2 个回答

为了返回两个值,我使用 std::pair (通常是 typedef’d)。您应该查看 boost::tuple (在 C++11 和更高版本中,有 std::tuple )以获得两个以上的返回结果。

随着在 C++ 17 中引入结构化绑定,返回 std::tuple 可能应该成为公认的标准。

原文由 Rob 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是关于该主题的“核心指南”(由 Bjarne Stroustrup 和 Herb Sutter 撰写)的链接。

https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-out-multi

部分报价:

F.21:要返回多个“out”值,最好返回一个结构或元组

原因 返回值是自记录为“仅输出”值。请注意,按照使用元组(包括对)的约定,C++ 确实有多个返回值,可能在调用站点使用 tie 或结构化绑定 (C++17) 的额外便利。更喜欢在返回值有语义的地方使用命名结构。否则,无名元组在泛型代码中很有用。

原文由 Xiangming Hu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏