C++ 从函数返回乘法参数 我知道这里存在类似的问题,但是我在这几天看到了这个算法,并且惊讶它是如何实现的。 int divide(int numerator, int denominator, int &remainder) { remainder = numerator % denominator; return numerator / denominator; }

C++ 从函数返回乘法参数 我知道这里存在类似的问题,但是我在这几天看到了这个算法,并且惊讶它是如何实现的。 int divide(int numerator, int denominator, int &remainder) { remainder = numerator % denominator; return numerator / denominator; },c++,C++,它是由引用而不是值本身实现的函数 这是最后的代码 int main() { int num = 14; int den = 4; int rem; int result = divide(num, den, rem); cout << result << "*" << den << "+" << rem << "=" << num << endl; 我的问题是,当函数从divid

它是由引用而不是值本身实现的函数 这是最后的代码

int main() {
  int num = 14;
  int den = 4;
  int rem;
  int result = divide(num, den, rem);
  cout << result << "*" << den << "+" << rem << "=" << num << endl;

我的问题是,当函数从divide函数范围返回一个值时,它如何确定第二个或提醒项?请帮助我。这是麻省理工学院官方网站的令牌。非常感谢,正如您已经说过的,rem变量通过引用传递

传递给函数的剩余部分是非常量引用,因此,该值可以在函数内部更改,并且在返回时在函数外部可见。

函数的第三个参数是引用,这意味着它是传入参数的别名


当调用者传递名为
rem
的变量(左值)时,函数会使用自己的参数
余数
将该变量化名。对
余数的所有更改实际上都是对
rem
的更改。因此,从某种意义上说,函数将填充调用者作用域中的变量。

如果您想从函数中返回多个值,可以使用它。

变量
rem
中的值将是函数完成后的剩余值。这是因为
divide()
函数接受
remites
参数作为引用类型,这意味着在
divide()
函数体内访问引用变量时,它实际上是在访问内存中的原始变量位置。因此,当您在函数体中设置参考变量
余数
的值时,它会影响
rem
变量原始内存地址处的值,并且一旦您从
divide()函数返回,即使在函数返回后,对原始
rem
变量的更改仍会持续,因为该地址的值已更改

因此,通过引用传递参数,可以在函数范围外更改多个值,有效地执行与返回多个变量相同的操作

这是因为引用基本上是隐式指针。。。因此,当您访问或更改引用变量的值时,它正在更改或访问该引用绑定到的原始内存地址处的值。作为指针的引用的“隐式”本质是,引用在创建时被“绑定”到内存地址,因此不能为NULL,并由编译器自动取消引用,因此不需要手动取消对普通指针的引用。因此,您永远无法创建“裸”引用,如:

int& int_reference;
这将抛出一个编译器错误。相反,引用必须始终“绑定”到实际内存地址(即内存中的实际变量),如下所示:

现在
int\u reference
被“绑定”到
actual\u variable
,并且每当您更改
int\u reference
的值时,您都在更改
actual\u variable
表示的内存位置处的值。所以如果你做了

int_reference = 5;
然后,
actual_变量
的值也将为5

当您将值传递给具有该数据类型作为引用的函数时,也可能发生引用的“绑定”操作。例如:

void func(int& a)
{
    a = 5;
}

int main()
{
    int b = 2;
    func(b);

    std::cout << b; //a value of "5" will be printed

    return 0;
}
void func(int&a)
{
a=5;
}
int main()
{
int b=2;
func(b);

std::cout我不喜欢输出参数。所以这里有一个解决方案,它可以返回所有的值。
可以从函数中使用boost::tie和return对(或tuple)

#include <iostream>
#include <utility>
#include "boost/tuple/tuple.hpp"

std::pair<int,int> divide(int numerator, int denominator)
{
      int remainder = numerator % denominator;
      int result    = numerator / denominator;

      return make_pair(remainder, result);
}

int main() 
{
    int res;
    int rem;

    boost::tie(rem,res) = divide(10,3);
    std::cout << rem << ": " << res << "\n"; 
}
#包括
#包括
#包括“boost/tuple/tuple.hpp”
std::对除(整数分子,整数分母)
{
整数余数=分子%分母;
int结果=分子/分母;
返回make_对(余数,结果);
}
int main()
{
国际关系;
内部rem;
推进:平动(rem,res)=除以(10,3);

std::难道我不明白你在问什么?你已经知道答案了。通过引用传递。作为一个完整的英语句子,你的问题转化为“divide()函数如何确定余数参数?”我不认为你在寻找这个问题的答案,这很简单“它使用名为‘rements’的变量,该变量被标识为函数的第二个形式参数。”您需要重新表述您的问题以获得有意义的答案。好的,我已经理解了所有内容,谢谢lotyes,它是正确的,只是我不理解,因为函数没有返回它
void func(int& a)
{
    a = 5;
}

int main()
{
    int b = 2;
    func(b);

    std::cout << b; //a value of "5" will be printed

    return 0;
}
#include <iostream>
#include <utility>
#include "boost/tuple/tuple.hpp"

std::pair<int,int> divide(int numerator, int denominator)
{
      int remainder = numerator % denominator;
      int result    = numerator / denominator;

      return make_pair(remainder, result);
}

int main() 
{
    int res;
    int rem;

    boost::tie(rem,res) = divide(10,3);
    std::cout << rem << ": " << res << "\n"; 
}