c++11 - c++函数返回对象的引用问题?

查看:258
本文介绍了c++11 - c++函数返回对象的引用问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

string& Func(string& foo)
{
    return foo;
}

这个函数返回一个string的引用,我觉得调用它的时候会产生一个临时的引用变量,然后这个临时的引用变量绑定到foo上,对吗? 还是不会产生这个临时引用变量,直接返回foo?

比如下面这句赋值语句:

string foo;
string s = Func(foo);

等价于下面这两句:

string& temp = foo; //一个临时的引用变量绑定到foo上
string s = temp;

我理解的对吗? 返回引用其实还是会产生一个临时的引用变量吧(一个指针的大小),只不过用引用避免了对象的拷贝对吧? 不对的话求大大指出哪里理解的不对。。。

但如果返回一个临时的引用变量的话,又可以对它取地址这又怎么回事? 比如:

cout << &Func(foo);

这个临时变量应该是个右值才对? 难道对这个临时引用变量的所有操作都是对它引用的对象的操作?
或者说压根就不会生成这个临时引用变量,所有的操作都是在函数返回的对象上的操作? - - 晕了,真心求指出我的错误!!!

解决方案

string& Func(string& foo)
{
    return foo;
}

这个函数返回一个string的引用,我觉得调用它的时候会产生一个临时的引用变量,然后这个临时的引用变量绑定到foo上,对吗?

不对。

还是不会产生这个临时引用变量,直接返回foo?

对。

比如下面这句赋值语句:

string foo;
string s = Func(foo);

等价于下面这两句:

string& temp = foo; //一个临时的引用变量绑定到foo上
string s = temp;

我理解的对吗?

返回引用其实还是会产生一个临时的引用变量吧(一个指针的大小),只不过用引用避免了对象的拷贝对吧? 不对的话求大大指出哪里理解的不对。。。

但如果返回一个临时的引用变量的话,又可以对它取地址这又怎么回事? 比如:

cout << &Func(foo);

这个临时变量应该是个右值才对?

显然是左值,你的Func都返回string&了,那就是string&。只有返回string&&的时候才是右值。而且不管左值右值都是可以取地址的。

难道对这个临时引用变量的所有操作都是对它引用的对象的操作?

或者说压根就不会生成这个临时引用变量,所有的操作都是在函数返回的对象上的操作? - - 晕了,真心求指出我的错误!!!

题主的理解基本没有错误,除了上面取地址的那一条

这篇关于c++11 - c++函数返回对象的引用问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆