访问临时字符串的 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中文网其他相关文章!