传递对引用的引用

dev*_*saw 7 c++ pass-by-reference

我认为在C++中传递对引用的引用是违法的.但是,当我运行此代码时,它没有给我任何错误.

void g(int& y)
{
   std::cout << y;
   y++;
 }

 void f(int& x)
{
  g(x);
}
int  main()
{
  int a = 34;
  f(a);
  return 0;

 }
Run Code Online (Sandbox Code Playgroud)

g()的形式参数是否有资格作为对引用的引用?

jxh*_*jxh 5

不,g()没有参考参考.它需要参考int.f()转发int它的引用接收到g().

实际上并不存在"对引用的引用",但是存在rvalue引用,它们类似于引用,但允许绑定到临时引用.


Ker*_* SB 5

在体内f,表达式 的价值xint.变量 x具有类型的事实int &意味着表达式的值是左值,因此它可以绑定到函数的参数g.


Zac*_*and 5

1)将引用传递给引用没有任何问题(这是移动构造函数和移动赋值运算符使用的 - 尽管它实际上称为右值引用)。

2)您所做的不是传递对引用的引用,而是将相同的引用传递fg

void g(int& x)
{
    x = 5;
}

void f(int& x)
{
    std::cout << "f-in " << x << std::endl;
    g(x);
    std::cout << "f-out " << x << std::endl;
}

int main()
{
    int x = 42;
    f(x);
    std::cout << "New x = " << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

  • 移动构造函数和移动赋值不使用引用引用。他们的参数的语法是“T&amp;&amp;”,但它被**定义**为右值引用。引用引用一直并且继续是非法的。 (3认同)