首页 >后端开发 >C++ >C 临时程序的寿命有多长以及为什么此代码可以工作?

C 临时程序的寿命有多长以及为什么此代码可以工作?

Susan Sarandon
Susan Sarandon原创
2024-12-15 04:42:11268浏览

How Long Do C   Temporaries Live and Why Does This Code Work?

临时对象的生命周期

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn