请问成员函数返回类型为引用类型有什么作用?
比如 template <typename T>
T&Data(){return data;}
书上说是为了使函数调用表达式能作为左值,我不太明白,请指点!最好能给出例子说明!谢谢各位!
[解决办法]
成为左值可以这样写:
Data() = data1;
当然,并不是说提倡你这样写。
还有,返回引用不仅仅是成为左值,而且可以直接代表被返回的那个东西,假如返回的不是引用,那么当你调用:
Data().f();
时,实际上f不是在原来那个对象上调用的,而是在新的临时对象上调用的,这有时候并不能满足需求。(原因就是当你不返回引用的时候,函数返回的结果并不是return表达式后边的那个对象,而是它的拷贝)
举例来说,标准库vector的operator[]返回的就是引用,所以当你调用:
vector <string> v;
……
v[0].clear();
时,你清空的就是vector当中保存的那个string对象,而不是一个operator[]返回后保存在临时变量中的一个新的string对象。
另外,即便你返回的是不能被修改的常量引用(const reference),也至少有另外一个好处:效率高。这一点跟通过常量引用传递函数参数是一样的。