c++ - 从 C++ 函数返回多个值

标签 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);

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

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

最佳答案

在 C++11 中你可以:

#include <tuple>

std::tuple<int, int> divide(int dividend, int divisor) {
    return  std::make_tuple(dividend / divisor, dividend % divisor);
}

#include <iostream>

int main() {
    using namespace std;

    int quotient, remainder;

    tie(quotient, remainder) = divide(14, 3);

    cout << quotient << ',' << remainder << endl;
}

在 C++17 中:

#include <tuple>

std::tuple<int, int> divide(int dividend, int divisor) {
    return  {dividend / divisor, dividend % divisor};
}

#include <iostream>

int main() {
    using namespace std;

    auto [quotient, remainder] = divide(14, 3);

    cout << quotient << ',' << remainder << endl;
}

或与结构:

auto divide(int dividend, int divisor) {
    struct result {int quotient; int remainder;};
    return result {dividend / divisor, dividend % divisor};
}

#include <iostream>

int main() {
    using namespace std;

    auto result = divide(14, 3);

    cout << result.quotient << ',' << result.remainder << endl;

    // or

    auto [quotient, remainder] = divide(14, 3);

    cout << quotient << ',' << remainder << endl;
}

关于c++ - 从 C++ 函数返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724738/

相关文章:

c++ - 复制/转换构造函数定义(const/non-const)

c++ - QPushButton 未显示在 QTableView 上(使用 QItemDelegate 过程)

c++ - 比较链表,C++,顺序相同但可以不同

c++ - 在 vector 中插入一些值?

c++ - 使用互斥量作为条件变量

c++ - 在静态变量定义中捕获的引用

c++ - 比较vtk数据类型和基本数据类型

c++ - 无法在C++ Windows上打开.txt文件

c++ - 如何将一个模块拆分成多个文件

c++ - 继承(C++)