std :: string :: substr返回的对象的生存期

Sum*_*udu 2 c++ string temporary lifetime c++11

我需要知道以下内容通常是否有效。

string s = "some value";
string v = s.substr(0, 50).c_str();
Run Code Online (Sandbox Code Playgroud)

分配v始终有效吗?由于所传回的物件的生存期会不会出现任何问题substr()

son*_*yao 9

在这里有效。在完整的表达式之后,销毁由所返回的临时对象substr;其中包括的初始化v

所有临时对象都将被销毁,这是评估(按词法)包含创建它们的地点的完整表达式的最后一步,并且如果创建了多个临时对象,则它们将以与创建顺序相反的顺序销毁。即使该评估以引发异常结束也是如此。

顺便说一句:这不是分配,而是的初始化(构造)v