我对c ++中的指针和引用很新,所以我想知道是否有人可以向我展示如何编写一个返回字符串引用的函数以及可能正在使用的函数的示例。例如,如果我想写一个像......这样的函数。
//returns a refrence to a string
string& returnRefrence(){
string hello = "Hello there";
string * helloRefrence = &hello;
return *helloRefrence;
}
//and if i wanted to use to that function to see the value of helloRefrence would i do something like this?
string hello = returnRefrence();
cout << hello << endl;
答案 0 :(得分:2)
诸如
之类的功能string& returnRefrence(){}
只有在可以访问超出其自身范围的string
的上下文中才有意义。例如,这可以是具有string
数据成员的类的成员函数,或者是可以访问某些全局字符串对象的函数。在退出该范围时,在函数体中创建的字符串将被销毁,因此返回对它的引用会导致悬空引用。
另一个可能有意义的选择是函数是否通过引用转换为字符串,并返回对该字符串的引用:
string& foo(string& s) {
// do something with s
return s;
}
答案 1 :(得分:0)
您也可以将变量声明为static:
std::string &MyFunction()
{
static std::string hello = "Hello there";
return hello;
}
但请注意,每次调用时,完全相同的字符串对象将作为参考返回。
例如,
std::string &Call1 = MyFunction();
Call1 += "123";
std::string Call2 = MyFunction(); //Call2 = "Hello there123", NOT "hello there"
Call2对象与Call1中引用的字符串相同,因此返回其修改后的值