gpt4 book ai didi

c++ - 当字符串保存在一个集合中时,c_str() 是否仍然有效

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:36 24 4
gpt4 key购买 nike

我有一个旧项目需要维护,其中使用了 const char *。出于某种原因,我想保留大量运行时生成的字符串。所以我创建了一个全局变量 std::set 来保存这些字符串。当生成新字符串时,除了添加到集合中外,我还会返回并发送 newString.c_str() ,它将保存在其他地方。例如。

std::set<std::string> g_stringDB;
void ArchieveString( AStruct *container, const char *temporaryString )
{
auto it = g_stringDB.emplace( temporaryString );
container->validString = it->first->c_str();
}

我想知道容器何时被外部使用(我指的是此功能之外的任何地方)。如果 pointer: validString 仍然安全。是否有可能指针已经指向其他东西,因为复制,构造发生在集合中?如果否,实现此要求的理想方法是什么?

最佳答案

c_str() 返回的无效规则是:

Passing a non-const reference to the string to any standard library function, or

Calling non-const member functions on the string, excluding operator[], at(), front(), back(), begin(), rbegin(), end() and rend().

对于集合元素,因为迭代器没有失效,所以你没问题,字符串对象没有改变。

所以如果字符串是固定的,那么你就没问题。

关于c++ - 当字符串保存在一个集合中时,c_str() 是否仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55019968/

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