在不使用静态字符串变量的情况下,是否有另一种有效的方法来编写代码?原因是,我使用下面的代码来说明在使用此静态字符串变量的更大项目中发生的崩溃。但是如果我删除static关键字,代码不会崩溃,但字符串变量的内容都没有。
std::string conversation;
const char *GetFoo()
{
static std::string word;
word ="hello ";
word +="buddy.";
word +=" How are things?";
return word.c_str();
}
void CallGetFoo()
{
const char *pp = GetFoo();
conversation +=pp;
cout<<pp;
}
int _tmain(int argc, _TCHAR* argv[])
{
CallGetFoo();
return 0;
}
答案 0 :(得分:3)
您遇到了返回指向函数本地数据的指针/引用的经典问题。删除static关键字时,会在函数末尾破坏word变量。这意味着它返回的c_str将是垃圾,你最终会得到未定义的行为。 static关键字保持对象的周围,以便通过多次调用函数保持相同。就像评论所说的那样,你最好还是返回一个std :: string。
返回std :: string会将局部变量的内容复制到调用者的std :: string。很可能,编译器将能够优化副本并执行称为返回值优化(RVO)的操作,但这是一个单独的主题。