对于C++有返回值的函数来说,其返回值的类型可以是值类型,也可以是引用类型。
1 返回值为值类型的函数
使用临时对象(temporary object)来保存函数的返回值。函数的返回值用于初始化调用点的一个临时对象,该临时对象就是函数调用的结果。如
int func()
{
return 1;
}
int i = func();
此时,有一个临时对象用来保存func()
函数的返回值
1
,之后将临时对象的值赋值给变量
i
。像其它任何对象一样,临时对象需要存储空间,并且能够构造和销毁。临时对象和其它对象的区别在于从来看不到它们,编译器负责决定他们的去留以及它们存在的细节。编译器使得所有的临时量自动地成为
const
。
所以,对于返回值为值类型的函数,其返回值为右值。
char get_val(string& str, int index)
{
return str[index - 1];
}
string str = "12345";
char ch = get_val(str, 1);//ch的值是’1’
get_val(str, 1) = 'a';//编译时报错,error C2106: “=”: 左操作数必须为左值
2 返回值为引用类型的函数
当函数的返回值是引用类型时,其返回值即为return的变量,所以不需要临时对象保存其返回值。所以,对于返回值为引用类型的函数,其返回值为左值。
char& get_val(string& str, int index)
{
return str[index - 1];
}
string str = "12345";
char ch = get_val(str, 1);//ch的值是’1’
get_val(str, 1) = 'a';//此时str的值为”a2345”