C++函数什么时候删除return值?
C++ function when is the return value deleted?
我在 C++ 中有以下代码。
string getName()
{
return "C++";
}
void printName(const char* name)
{
cout << name << endl;
}
int main()
{
printName(getName().c_str());
}
函数getName
returns一个string
。我将 string
的 c_str
指针传递给 printName
函数。我想知道在调用 printName()
函数之前,返回的 string
是否会被删除。如果不是那么什么时候删除返回值。
temporary表达式完整后会被销毁
All temporary objects are destroyed as the last step in evaluating the full-expression that (lexically) contains the point where they were created, and if multiple temporary objects were created, they are destroyed in the order opposite to the order of creation.
由getName()
创建的临时文件将在包含printName()
执行的完整表达式后被销毁,从c_str
获得的指针在printName()
中仍然有效。
在给定的示例中,执行顺序是这样的
getName()
将执行它 return 字符串。
上面return字符串的引用将被c_str()
函数使用。
最后printName
会被执行,然后return对象会被销毁,return值不会在printName
执行之前被销毁功能。
因为完整的表达式将按词法顺序执行,临时创建的对象将在作用域结束后被销毁。
我在 C++ 中有以下代码。
string getName()
{
return "C++";
}
void printName(const char* name)
{
cout << name << endl;
}
int main()
{
printName(getName().c_str());
}
函数getName
returns一个string
。我将 string
的 c_str
指针传递给 printName
函数。我想知道在调用 printName()
函数之前,返回的 string
是否会被删除。如果不是那么什么时候删除返回值。
temporary表达式完整后会被销毁
All temporary objects are destroyed as the last step in evaluating the full-expression that (lexically) contains the point where they were created, and if multiple temporary objects were created, they are destroyed in the order opposite to the order of creation.
由getName()
创建的临时文件将在包含printName()
执行的完整表达式后被销毁,从c_str
获得的指针在printName()
中仍然有效。
在给定的示例中,执行顺序是这样的
getName()
将执行它 return 字符串。上面return字符串的引用将被
c_str()
函数使用。最后
printName
会被执行,然后return对象会被销毁,return值不会在printName
执行之前被销毁功能。
因为完整的表达式将按词法顺序执行,临时创建的对象将在作用域结束后被销毁。