在这个c++扩展的欧几里得函数中,逗号分隔的返回值是必需的吗?

dphi5xsq  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(93)

今天我在复习扩展欧几里德算法的时候,无意中发现了一个代码库,它可以做到这一点:

#include <bits/stdc++.h>

using namespace std;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

ll euclid(ll a, ll b, ll &x, ll &y) {
  if (!b) {
    return x = 1, y = 0, a;
  }
  ll d = euclid(b, a % b, y, x);
  return y -= a / b * x, d;
}

我很好奇返回类型是long long,从我最初的搜索来看,在c++的多逗号返回中,只有正确的值被保留和返回,所以问题是,为什么这个函数的作者仍然希望在同一个返回行的左手边是x = 1, y = 0y -= a / b * x

dgiusagp

dgiusagp1#

该回流管

return y -= a / b * x, d;

确实只通过返回值true返回d
然而,它也更新两个参考参数xy
这可以看作是价值回归的一部分。
它可以在前面的行中完成。
这将避免作者试图返回多个值的错误印象,正如您正确提到的,C++不支持这一点。

相关问题