gpt4 book ai didi

c++ - 为什么在 C++ 中更喜欢 char* 而不是 string?

转载 作者:可可西里 更新时间:2023-11-01 14:54:02 27 4
gpt4 key购买 nike

我是一名尝试编写 C++ 代码的 C 程序员。我听说 C++ 中的 string 在安全性、性能等方面优于 char*,但有时似乎 char* 更好选择。有人建议程序员不要在 C++ 中使用 char*,因为我们可以做所有 char* 可以用 string 做的事情,而且更安全、更快。

你曾经在 C++ 中使用过 char* 吗?具体条件是什么?

最佳答案

使用std::string 更安全,因为您无需担心为字符串分配/释放内存。 C++ std::string 类很可能在内部使用 char* 数组。但是,该类将为您管理内部数组的分配、重新分配和释放。这消除了使用原始指针带来的所有常见风险,例如内存泄漏、缓冲区溢出等。

此外,它也非常方便。您可以复制字符串、追加到字符串等,而无需手动提供缓冲区空间或使用类似 strcpy/strcat 的函数。使用 std::string 就像使用 =+ 运算符一样简单。

基本上,它是:

 std::string s1 = "Hello ";
std::string s2 = s1 + "World";

相对于...

 const char* s1 = "Hello";
char s2[1024]; // How much should I really even allocate here?
strcpy(s2, s1);
strcat(s2, " World ");

编辑:

针对您关于在 C++ 中使用 char* 的编辑:许多 C++ 程序员会声称您应该永远使用 char*,除非您正在使用一些需要它的 API/遗留函数,在这种情况下,您可以使用 std::string::c_str() 函数来转换 std::stringconst char*

但是,我会说在 C++ 中有一些 C 数组的合法用途。例如,如果性能绝对重要,则堆栈上的小型 C 数组可能是比 std::string 更好的解决方案。您也可能正在编写需要绝对控制内存分配/解除分配的程序,在这种情况下,您将使用 char*。此外,正如评论部分所指出的,std::string 不能保证为您提供连续的、可写的缓冲区 *,因此您不能直接从文件写入 std::string 如果你需要你的程序是完全可移植的。但是,如果您需要这样做,std::vector 可能仍然比使用原始 C 数组更可取。


* 虽然在 C++11 中这已经改变,因此 std::string 确实为您提供了一个连续的缓冲区

关于c++ - 为什么在 C++ 中更喜欢 char* 而不是 string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764079/

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