在C ++中将引用作为对象传递?

时间:2018-02-07 19:48:53

标签: c++ c++11

我知道C ++引用不是对象,但似乎我可以将引用作为对象传递。

在下面的代码中,v1v2是引用,并通过构造函数指定为double &v1 = x1。然后,在foo()来电时,我应该bar(double &)还是bar(double)?基于double &v1 = x1,不应该有bar(double)

这让我感到困惑。有人可以解释一下吗?

#include <iostream>

class FooBar
{
private:
    double &v1, &v2;
public:
    FooBar(double &, double &);
    void foo();
    void bar(double &);
};

FooBar::FooBar (double &x, double &y): v1(x), v2(y) {}

void FooBar::foo()
{
    bar(v1);
    bar(v2);
}

void FooBar::bar(double &x)
{
    std::cout << x << "\n";
}

int main()
{
    double x1 = {0.5}, x2 = {1.5};
    FooBar f(x1, x2);
    f.foo();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

然后在从foo()调用时,我应该有bar(double&amp;)还是   酒吧(双)?基于double&amp; v1 = x1,不应该有bar(double)?

在这种情况下并不重要,v1是一个引用,如果你在bar中更改它,用于初始化它的变量也会改变,无论参数是{{ 1}}被声明为bardouble

请记住,引用就像变量的同义词。尽管C ++标准没有规定编译器必须如何实现引用,但我知道的每个C ++编译器都将引用实现为指针。所以基本上,你无论如何都要将变量的内存地址传递给函数。