首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将引用传递给引用

将引用传递给引用
EN

Stack Overflow用户
提问于 2013-08-27 19:04:23
回答 5查看 8.5K关注 0票数 11

我认为在C++.However中传递对引用的引用是非法的,当我运行这段代码时,它不会给出错误。

代码语言:javascript
复制
void g(int& y)
{
   std::cout << y;
   y++;
 }

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

 }

g()的形式参数不符合引用的条件吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-27 19:09:48

1)传递对引用的引用(这是移动构造函数和移动赋值操作符使用的--尽管它实际上被称为rvalue-引用)没有什么错。

2)您要做的不是传递对引用的引用,而是通过f将相同的引用传递给g

代码语言:javascript
复制
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;
}
票数 5
EN

Stack Overflow用户

发布于 2013-08-27 19:05:59

不,g()没有引用引用。它引用一个intf()将它接收到的int的引用转发给g()

“对引用的引用”实际上并不存在,但是存在rvalue references,它类似于引用,但允许绑定到临时引用。

票数 6
EN

Stack Overflow用户

发布于 2013-08-27 19:07:39

f的主体中,表达式x的值是int。变量x具有int &类型这一事实意味着表达式的值是lvalue,因此它可以绑定到函数g的参数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18473496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档