2

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

string getName()
{
    return "C++";
}

void printName(const char* name)
{
    cout << name << endl;
}

int main()
{
    printName(getName().c_str());
}

该函数getName返回一个string. 我正在传递to函数的c_str指针。我想知道在调用函数之前返回的是否会被删除。如果不是,那么何时删除返回的值。stringprintNamestringprintName()

4

2 回答 2

5

完整表达后临时将被销毁。

作为评估完整表达式的最后一步,所有临时对象都被销毁,该完整表达式(词法上)包含创建它们的点,如果创建了多个临时对象,它们将按照与创建顺序相反的顺序被销毁。

的临时创建的getName()将在包含执行的完整表达式之后被销毁,从中printName()获取的指针在c_str内部保持有效printName()

于 2019-09-26T06:24:57.437 回答
2

在给定的示例中,执行顺序是这样的

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

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

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

因为完整的表达式将按词法顺序执行,临时创建的对象将在作用域结束后被销毁。

于 2019-09-26T06:41:10.667 回答