【问题标题】:Passing reference as object in C++?在 C++ 中将引用作为对象传递?
【发布时间】:2018-07-18 05:36:14
【问题描述】:

我知道 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;
}

【问题讨论】:

标签: c++ c++11


【解决方案1】:

那么当从 foo() 调用时,我应该使用 bar(double &) 还是 酒吧(双)?基于double &v1 = x1,不应该有bar(double)吗?

在这种情况下没关系,v1 是一个引用,如果你在 bar 内更改它,用于初始化它的变量也会更改,无论 bar 的参数是否声明为doubledouble&amp;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2020-01-06
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多