【问题标题】:C++ - How do I return 2 values using tuple and auto[value1, value2] as c++ says value1 should be const?C++ - 如何使用元组和 auto[value1, value2] 返回 2 个值,因为 c++ 说 value1 应该是 const?
【发布时间】:2026-01-14 00:15:01
【问题描述】:

我正在用 C++ 编写一个 Polynom 类。在以下链接中,解释了如何使用元组返回多个值:Returning multiple values from a C++ function

所以我尝试按照指示进行编码以返回商和多项式除法的余数,但它不起作用。

这是我的划分方法:

tuple<Polynome, Polynome> division(Polynome& D)
{   
    Polynome Q;
    Polynome R(*this);
    Polynome nul;
    int delta(degre() - D.degre());
    float a;

    while (delta >= 0 && R != nul)
    {
        a = R.top() / D.top();
        Polynome nouveauPoly(a, delta);
        Q = Q + nouveauPoly;
        R = R - nouveauPoly * D;
        delta = R.degre() - D.degre();
    }
    return {Q, R};
}

然后,当我按照上面链接中的指示进行操作并开始编写自己的运算符时:

Polynome operator/(Polynome& D)
{
    auto [Q, R] = division(D);
}

我收到一条错误消息,告诉我 Q 应该是常数值。我不明白为什么 Q 应该是这样,以及错误来自哪里,尤其是关于此代码来自 * 中的最佳答案。我试图首先声明多项式 Q 和 R,但它没有改变任何东西。

最终我找到了一种使用元组实现我想要的方法,但我仍然想知道为什么指定的答案对我不起作用。

非常感谢

【问题讨论】:

  • 您能否添加有关编译器抱怨哪一行的信息(或者更好的是完整的错误消息)? Polynome 类也可以使用复制/移动构造函数/赋值运算符吗?顺便说一句:operator/ 是非无效的,因此需要 return 语句。可以说签名(假设它是Polynome 类的成员函数)应该是Polynome operator(Polynome const&amp; d) const;,这需要对division 函数进行类似的更改。
  • 顺便说一句:英语 = 多项式,德语 = 多项式,法语 = 多项式。
  • 无法复制:godbolt.org/z/v4s86x47z
  • 猜测,你没有 C++17 或更新的编译器

标签: c++ tuples constants return-value


【解决方案1】:

Structured Binding 可能不适用于您的编译器版本(或 C++ 版本选项)。这需要 C++17。

如果你不能使用 C++17,你可能想尝试旧的方法来做到这一点:

代替

auto [Q, R] = division(D);

使用

Polynome Q, R;
std::tie(Q, R) = division(D);

(这需要#include &lt;tuple&gt;,但我认为它已经包含在内。)

【讨论】:

  • 好的,非常感谢!
  • @GeoffreyLaforest(Psst,如果你在这种情况下接受这个问题会很好(评级下方的复选标记符号)。)
  • 哦抱歉我没注意到,现在完成了!再次非常感谢您的回答(以及有关如何检查答案的信息^^)
最近更新 更多