gpt4 book ai didi

c++ - stringstream::str 复制生命周期

转载 作者:行者123 更新时间:2023-11-28 02:58:07 24 4
gpt4 key购买 nike

许多 C++ 程序员在第一次使用 stringstream 时会忽略(读我)的一点是 stringstream::str() 返回的拷贝是一个临时的,一直持续到使用它的表达式结束。但是,我不明白:

  1. 这是如何完成的。查看 libstdc++ 的 sstream header ,我只看到正在制作和返回的拷贝。生命周期如何限制?
  2. 为什么这是理想的行为,特别是因为这是一个很常见的陷阱。如果无论如何都在制作拷贝,为什么我不能取得它的所有权?

请注意,这不是 stringstream, string, and char* conversion confusion 的拷贝.上面解释了行为和解决方法;我正在寻找机制和基本原理。

最佳答案

这不是stringstream的问题。这是 c_str 函数的问题 - 它返回指向 std::stringchar* 表示的指针,但它只存在于一个原始字符串。当您调用 char *str = ss.str().c_str() 时,实际上会发生以下情况:

string tmp = ss.str();
char *str = tmp.c_str();
tmp.~string (); // after that line the pointer `str` is no longer valid

c_str 是一个仅出于兼容性和速度目的而提供的危险函数,您应该避免使用它。

关于c++ - stringstream::str 复制生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21534682/

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