从函数返回"const char*"是一个好主意吗?

AMM*_*AMM 25 c++ string

现在我有一个必须返回一个字符串的函数.我看到了一个特定的实现,他从函数中返回一个const char*.

像这样的东西:

const char * GetSomeString() 
{ 
  ........   
  return somestlstring.c_str(); 
}

SomeOtherFoo ()
{
  const char * tmp = GetSomeString();
  string s = tmp;
}
Run Code Online (Sandbox Code Playgroud)

现在我觉得这有可能出现问题.我的直觉是否正确?或者这是一个非常安全的代码吗?

请给我你的建议.我有一种感觉返回const char*这种方式可能会导致破坏..

谢谢,阿琼

Dav*_*eas 27

取决于somestlstring那里正在做什么和做什么.

如果它是局部变量,则返回指向正在GetSomeString完成时释放的内存的指针,因此它是一个悬空指针和一个错误.

这一切都可归结为somestlstring您在其上执行的生命周期和操作.返回的指针.c_str()保证仅在字符串中的下一个变异操作时有效.因此,如果在构建之前和之前的某些内容发生变化somestlstring,您将处于未定义的行为状态..c_str()s


小智 6

如果您询问函数const char *返回 的生命周期std::string c_str(),它将一直有效,直到您修改从中获取的字符串,或直到字符串被销毁.如果你记住这两个事实,那么从一个函数返回它是可以的(虽然我会说这不是很好的练习).