gpt4 book ai didi

c++ - std::string::c_str() 和临时文件

转载 作者:IT老高 更新时间:2023-10-28 13:24:15 25 4
gpt4 key购买 nike

以下 C++ 代码是否格式正确:

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

std::string random_string_generator()
{
// returns a random std::string object
}

consumer(random_string_generator().c_str());

我遇到的问题是,在创建临时 std::string 对象并获取 c_str() 指针之后,没有什么能阻止 std::string 对象被破坏(或者我错了?)。你能否指出我的标准,如果代码没问题的话。当我使用 g++ 进行测试时,它确实有效。

最佳答案

std::string::c_str()返回的指针指向内存由字符串对象维护。它一直有效,直到非常量在字符串对象上调用函数,或者字符串对象是破坏。您关心的字符串对象是临时的。它将在完整表达式的末尾被破坏,而不是之前和不是之后。在您的情况下,完整表达式的结尾在调用consumer,所以你的代码是安全的。如果 consumer将指针保存在某处,以备日后使用。

从 C++98 开始就严格定义了临时对象的生命周期。在此之前,它会有所不同,具体取决于编译器和您使用的代码写的不会与 g++ 一起工作(1995 年之前,大致是——g++当标准委员会投票时,几乎立即改变了这一点)。(当时也没有 std::string ,但同样的问题会影响任何用户编写的字符串类。)

关于c++ - std::string::c_str() 和临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10006891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com