c++ - 临时工的生命周期

标签 c++ temporary c++-faq lifetime full-expression

下面的代码工作正常,但为什么是正确的代码?为什么 foo() 返回的临时对象的“c_str()”指针有效?我想,当输入 bar() 时,这个临时文件已经被销毁了——但它似乎不是这样的。所以,现在我假设 foo() 返回的临时对象将在调用 bar() 之后被销毁——这是正确的吗?为什么?

std::string foo() {
  std::string out = something...;
  return out;
}

void bar( const char* ccp ) {
  // do something with the string..
}

bar( foo().c_str() );

最佳答案

当完整表达式在词法上包含其评估创建临时对象的右值被完全评估时,临时对象被销毁。让我用 ASCII 艺术来演示:

____________________   full-expression ranges from 'b' to last ')'
bar( foo().c_str() );
     ^^^^^          ^
       |            |
     birth       funeral

关于c++ - 临时工的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865623/

相关文章:

c++ - 有没有办法延长 C++ 中临时对象的生命周期?

ios - Swift NSURLSession didFinishDownloadingURL 从临时文件移动

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c++ - 为什么 std::getline() 在格式化提取后跳过输入?

c++ - 如何在Qt 中的网格布局中添加滚动条?

c++ - 在 C++ 中乘以用户定义的数组

c++ - C++使用ifstream判断文件是否存在的问题

c++ - 编译器如何优化这段代码

c++ - 将 const 引用返回到临时行为与本地 const 引用不同?

c++ - 指向类数据成员 "::*"的指针