我会给你一些例子:
第一个例子,不返回本地范围对象,例如:
const string &dontDoThis(const string &s)
{
string local = s;
return local;
}
你不能通过引用返回local,因为local在dontDoThis的主体末尾被销毁。
第二个例子,可以通过引用返回:
const string &shorterString(const string &s1, const string &s2)
{
return (s1.size() < s2.size()) ? s1 : s2;
}
在这里,您可以通过引用返回 s1 和 s2,因为它们是在调用 shorterString 之前定义的。
第三个例子:
char &get_val(string &str, string::size_type ix)
{
return str[ix];
}
使用代码如下:
string s("123456");
cout << s << endl;
char &ch = get_val(s, 0);
ch = 'A';
cout << s << endl; // A23456
get_val 可以通过引用返回s 的元素,因为调用后s 仍然存在。
第四个例子
class Student
{
public:
string m_name;
int age;
string &getName();
};
string &Student::getName()
{
// you can return by reference
return m_name;
}
string& Test(Student &student)
{
// we can return `m_name` by reference here because `student` still exists after the call
return stu.m_name;
}
用法示例:
Student student;
student.m_name = 'jack';
string name = student.getName();
// or
string name2 = Test(student);
第五个例子:
class String
{
private:
char *str_;
public:
String &operator=(const String &str);
};
String &String::operator=(const String &str)
{
if (this == &str)
{
return *this;
}
delete [] str_;
int length = strlen(str.str_);
str_ = new char[length + 1];
strcpy(str_, str.str_);
return *this;
}
然后您可以像这样使用上面的operator=:
String a;
String b;
String c = b = a;