函数返回值是一个引用的情况:
1.值是如何被返回的:
返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。
如果函数返回引用,则该引用仅是它所引对象的一个别名。
2.不能返回局部对象的引用或指针:
函数完成后,他所占的内存空间将被释放,函数的终止意味着局部变量的引用将指向不再有效的内存区域。
const string &mainip(){string ret;if(!ret.empty())return ret;//错误,返回局部对象的引用elsereturn "empty";//错误,“empty”是一个局部临时量
}
3.引用反回左值:
左值:赋值运算符需要一个(非常量)左值作为其左侧运算对象,得到的结果也仍然是一个左值。当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(内存中的位置)。
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';//将s[0]的值改为A,调用是个左值,和其他左值一样也能出现在赋值运算符左侧。cout << s << endl;//输出A valuereturn 0;
}