我想知道为什么当我确实喜欢 return(a,b) 时只返回 b

问题描述 投票:0回答:2
#include <iostream>
using namespace std;
int addmult(int ii, int jj);

int main() {
    int i = 3, j = 4, k, l;
    k = addmult(i, j); // 12
    l = addmult(i, j); // 12
    cout << k << "\n" << l; // 12 12 
}

int addmult(int ii, int jj) {
    int kk, ll;
    kk = ii + jj; // 7
    ll = ii * jj; // 12
    int a = (kk, ll);
    cout << "a = " << a << endl; // 12
    return a;
}; 

你好,我想知道为什么我这样返回时输出结果是12。 我像这样返回了 (val1, val2),但我发现只返回了 b。

c++ return tuples
2个回答
3
投票

当你有一个表达式时

(kk, ll)
它不会创建一个元组。相反,它会计算两个表达式并返回
ll
的值。因此
addmult
函数最终只会返回该值。

标准库中有

std::pair
数据类型,它可以让您返回两个值。

std::pair<int, int> addmult(int ii, int jj) {
    int kk, ll;
    kk = ii + jj; // 7
    ll = ii * jj; // 12
    std::pair<int, int> a {kk, ll};
    cout << "a = " << a.first << ", " << a.second << endl;
    return a;
}

2
投票

如果你想要有多个返回值和可读的代码。 然后将您自己的返回类型定义为结构体。 (对于成对的情况,我总是不得不回顾第一个和/或第二个的含义。)

#include <iostream>

// declare a struct that can hold all your return values
// and give them readable names.
struct addmult_result_t
{
    int addition;
    int multiplication;
};

// do your calculation and return the result
addmult_result_t addmult(int ii, int jj) 
{
    return addmult_result_t{ii + jj, ii * jj};
}

int main()
{
    int i = 3, j = 4;
    auto result = addmult(i, j);

    std::cout << "addition = " << result.addition << "\n";
    std::cout << "multiplication = " << result.multiplication << "\n";

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.