C++语言的函数返回值类型可以分为内部类型和自定义类型两大类。
如果函数返回内部类型并且希望返回值可以作为左值(即可以放在赋值操作符左边的),那就必须返回引用类型。
而在函数返回自定义类型(即返回类类型)中根据是否可作为左值,返回值是否可调用成员函数的不同可分为以下四种情况。
- T f(): 返回一般的类类型,返回的类类型不能作为左值,但返回的类类型可以直接调用成员函数来修改,如function().set_Value(); 返回类类型调用复制构造函数。
- const T f(): 此种类型与上述第一种相同,唯一不同的是返回的类类型不能调用成员函数来修改,因为有const限定符。
- T& f():返回类的引用可以作为左值,并且返回的类类型引用可以直接调用成员函数来修改,返回的类类型不会调用复制构造函数。
- const T& f():不能作为左值,不能调用成员函数修改,不会调用复制构造函数。
返回引用的函数返回一个左值。因此,这样的函数可用于任何要求使用左值的地方
#include <iostream>
#include <string>
using namespace std;
char &get_val(string &str, string::size_type ix)
{
return str[ix];
}
int main()
{
string s("a value");
cout << s << endl;
get_val(s, 0) = 'A';
cout << s << endl;
return 0;
}
给函数返回值赋值可能让人惊讶,用于函数返回的是一个引用,因此这是正确的,该引用是被返回元素的同义词
如果不希望引用返回值被修改,返回值应该为const
const char &get_val