我知道C ++引用不是对象,但似乎我可以将引用作为对象传递。
在下面的代码中,v1
和v2
是引用,并通过构造函数指定为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;
}
答案 0 :(得分:1)
然后在从foo()调用时,我应该有bar(double&amp;)还是 酒吧(双)?基于double&amp; v1 = x1,不应该有bar(double)?
在这种情况下并不重要,v1
是一个引用,如果你在bar中更改它,用于初始化它的变量也会改变,无论参数是{{ 1}}被声明为bar
或double
。
请记住,引用就像变量的同义词。尽管C ++标准没有规定编译器必须如何实现引用,但我知道的每个C ++编译器都将引用实现为指针。所以基本上,你无论如何都要将变量的内存地址传递给函数。