作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
下面的代码工作正常,但为什么是正确的代码?为什么 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/
我是一名优秀的程序员,十分优秀!