gpt4 book ai didi

c++ - 将 std::string 的 c_str() 结果分配给标准保证安全的同一个 std::string?

转载 作者:行者123 更新时间:2023-12-04 12:30:21 28 4
gpt4 key购买 nike

关于 std::string,标准是否保证以下代码安全?

#include <string>
#include <cstdio>

int main()
{
std::string strCool = "My cool string!";
const char *pszCool = strCool.c_str();
strCool = pszCool;
printf( "Result: %s", strCool.c_str() );
}

我看到声明表明 c_str 的结果只能保证在对同一 std::string 进行另一个方法调用之前可以安全使用,但它是我不清楚将 const char * 传回赋值方法是否安全。

当使用真实世界的编译器(最新版本的 GCC、Clang 和 MSVC)进行测试时,它们似乎都支持这种行为。

此外,编译器还支持将字符串的后缀分配回自身,例如strCool = pszCool + 3 在这个例子中;结果将是该字符串与传递给它的值相同。

这种行为是否以某种方式得到保证,或者我只是幸运,我测试过的编译器提供的标准库支持这种情况?

最佳答案

在 C++17 中,这被指定为:

basic_string& operator=(const charT* s);

返回: *this = basic_string(s)

备注:使用traits::length()

此操作顺序保证在原始存储被销毁之前制作拷贝。虽然不需要标准库来使用这个确切的操作序列来实现此调用,但它需要具有与所描述的相同的行为。

在 C++20 中,这个措辞被改写了,但如果意思改变了我会感到惊讶。

关于c++ - 将 std::string 的 c_str() 结果分配给标准保证安全的同一个 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69533568/

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