Я покажу вам несколько примеров:
Первый пример, не возвращайте объект локальной области, например:
const string &mainip(const string &s)
{
string ret=s;
// operator ret
return ret;
}
вы не можете вернуть ret по ссылке, потому что ret isуничтожен в конце.
Второй пример, вы можете вернуться по ссылке:
const string &shorterString(const string &s1,const string &s2)
{
return s1.size()<s2.size()?s1:s2;
}
вы можете вернуться по ссылке, поскольку s1 и s2 все еще существуют.
Третийпример:
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
, поскольку после возврата по ссылке объект все еще существует;
Четвертый пример
class Student{
public:
string m_name;
int age;
string& getName();
};
string& Student::getName(){ // you can return by reference
return m_name;
}
// you can return by reference, after this function stu object is still exists
string& Test(Student &stu)
{
return stu.m_name;
}
пример использования:
Student stu;
stu.m_name = 'jack';
string name = stu.getName(); //
//or
string name2 = Test(stu);
Пятый пример:
class String{
private:
char* str_;
public:
String& operator=(const String& str);
};
// for example a=b=c usage
String& String::operator =(const String &str)
{
if (this == &str)
{
return *this;
}
delete [] str_;
int len = strlen(str.str_);
str_ = new char[len+1];
strcpy(str_,str.str_);
return *this;
}