首页  >  文章  >  后端开发  >  访问临时“std::string”对象的“c_str()”是否安全?

访问临时“std::string”对象的“c_str()”是否安全?

Linda Hamilton
Linda Hamilton原创
2024-11-06 19:10:03204浏览

Is It Safe to Access the `c_str()` of a Temporary `std::string` Object?

访问临时字符串的 c_str() 安全吗?

在 C 程序中,以下代码引起了关注:

void consumer(char const* p) { std::printf("%s", p); }

std::string random_string_generator();

consumer(random_string_generator().c_str());

有人认为,由 random_string_generator 生成的临时 std::string 对象可能会在调用消费者之前被销毁,从而可能导致 c_str() 指针无效。然而,理解 временной переменных 生命周期的标准定义至关重要。

根据 C 标准,std::string::c_str() 返回的指针在调用非常量函数之前保持有效。在 std::string 对象上,或者它被破坏。在给定的代码中,临时 std::string 对象将在完整表达式的末尾被破坏,其中包括对消费者的调用。这证实了代码的格式良好。

只要消费者不尝试保留 c_str() 指针以供以后使用,就可以安全地假设临时 std::string 对象不会被过早地被破坏了。自 C 98 以来,临时变量的生命周期就得到了精确定义,确保所提供的代码可以在不同的编译器上安全地执行。

以上是访问临时“std::string”对象的“c_str()”是否安全?的详细内容。更多信息请关注PHP中文网其他相关文章!

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