C++函数何时删除返回值?

C++ function when is the return value deleted?

本文关键字:返回值 删除 何时 函数 C++      更新时间:2023-10-16

我在 c++ 中有以下代码。

string getName()
{
return "C++";
}
void printName(const char* name)
{
cout << name << endl;
}
int main()
{
printName(getName().c_str());
}

函数getName返回一个string。我正在将stringc_str指针传递给printName函数。我想知道在调用printName()函数之前是否会删除返回的string。如果不是,则何时删除返回值。

临时将在完整表达式后销毁。

所有临时对象

都将作为计算完整表达式的最后一步销毁,该表达式(以词法方式(包含创建它们的点,如果创建了多个临时对象,则按与创建顺序相反的顺序销毁它们。

getName()创建的临时表达式将在包括执行printName()的完整表达式后销毁,从c_str获得的指针在printName()内仍然有效。

在给定的示例中,执行序列如下所示

  1. getName()将被执行,它将返回字符串。

  2. c_str()函数将使用上述返回字符串的引用。

  3. 最后printName将被执行,然后返回对象将被销毁,返回值不会在printName执行此函数之前被销毁。

由于完整表达式将按词法顺序执行,临时创建的对象将在范围结束后销毁。