foo() 和 bar() 中对象的生命周期
在 C 中,在函数调用期间创建的对象被视为临时对象。了解它们的生命周期对于确保正确的程序行为至关重要。
考虑以下代码:
std::string foo() { std::string out = something...; return out; } void bar( const char* ccp ) { // do something with the string.. } bar( foo().c_str() );
问题:
为什么 c_str( ) foo() 返回的临时对象的指针在 bar() 函数中有效,即使在 foo() 之后完成?
答案:
根据 C 标准,一旦包含临时对象创建的完整表达式完成,临时对象就会被销毁。在这种情况下,完整的表达式是:
bar( foo().c_str() );
在 ASCII 艺术中,临时对象的生命周期如下所示:
____________________ full-expression ranges from 'b' to last ')' bar( foo().c_str() ); ^^^^^ ^ | | birth funeral
临时对象是在 foo() 时创建的被调用(诞生)并在表达式执行完成(葬礼)后销毁,确保 c_str() 指针在 bar() 执行过程中保持有效。
以上是为什么临时字符串对象的'c_str()”指针在其创建函数'foo()”返回后在'bar()”中有效?的详细内容。更多信息请关注PHP中文网其他相关文章!