子表达式中临时对象的生命周期

时间:2018-07-30 11:13:02

标签: c++

函数foo()收到一个const char *作为其参数,就像strlen()

void foo(const char *p);

现在我有一个std::string s = "some characters"。如果我打电话

foo(s.substr(1, 2).c_str());

substr对象的寿命是多少?它将保留直到函数返回?我担心如果在substr进入之前foo()被销毁,它将是无用的。

1 个答案:

答案 0 :(得分:0)

如果选中std::string::substr,该函数将返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本。因此它将一直有效直到foo()返回,并且在输入foo()之前不会被销毁。