临时对象的生命周期
在 C 中,临时对象的创建有多种原因,例如从函数返回值或计算表达式。了解临时变量的生命周期对于正确的程序行为至关重要。
考虑以下代码片段:
std::string foo() { std::string out = something...; return out; } void bar(const char* ccp) { // do something with the string.. } bar(foo().c_str());
在此代码中,由 foo() 创建的临时字符串由调用 bar() 时使用 const char* 指针。问题出现了:为什么这段代码有效?
答案在于临时代码的生命周期。根据 C 标准,当词法上包含创建该对象的右值的完整表达式被完全求值时,临时对象将被销毁。
在上面的代码中,完整表达式为 bar(foo().c_str ())。该表达式的计算从 '(左括号)开始,到最后一个 ')'(右括号)结束。在此表达式中,通过计算 foo() 创建临时字符串,并在临时字符串上调用 c_str() 方法。
因此,临时字符串在完整表达式的开头存在,并且是当表达式完全求值时(即调用 bar() 之后)被销毁。这解释了为什么 bar() 中的 const char* 指针仍然引用有效的字符串。
总之, foo() 返回的临时值仅在包含它的完整表达式被求值后才会被销毁,确保foo().c_str() 返回的指针在调用 bar() 的过程中保持有效。
以上是C 临时程序的寿命有多长以及为什么此代码可以工作?的详细内容。更多信息请关注PHP中文网其他相关文章!