我认为在C++.However中传递对引用的引用是非法的,当我运行这段代码时,它不会给出错误。
void g(int& y)
{
std::cout << y;
y++;
}
void f(int& x)
{
g(x);
}
int main()
{
int a = 34;
f(a);
return 0;
}g()的形式参数不符合引用的条件吗?
发布于 2013-08-27 19:09:48
1)传递对引用的引用(这是移动构造函数和移动赋值操作符使用的--尽管它实际上被称为rvalue-引用)没有什么错。
2)您要做的不是传递对引用的引用,而是通过f将相同的引用传递给g。
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;
}发布于 2013-08-27 19:05:59
不,g()没有引用引用。它引用一个int。f()将它接收到的int的引用转发给g()。
“对引用的引用”实际上并不存在,但是存在rvalue references,它类似于引用,但允许绑定到临时引用。
发布于 2013-08-27 19:07:39
在f的主体中,表达式x的值是int。变量x具有int &类型这一事实意味着表达式的值是lvalue,因此它可以绑定到函数g的参数。
https://stackoverflow.com/questions/18473496
复制相似问题