我们如何区分 C++ 中的字符数组和字符串?
有什么 char 数组比 std::string 做得更好的吗?
最佳答案
How do we differentiate char arrays and string in c++?
你不知道,字符串文字是根据定义以空字符结尾的字符数组。由于数组一有机会就衰减为指针,
const char*
是(仍然)通常是字符串的同义词。如果您问什么时候应该写
new char[n]
,答案是永远。如果有的话,应该是std::make_unique<char[]>(n);
除非您正在编写自己的 std::string
版本,使用标准的。如果您需要缓冲区,请使用 std::vector
或 std::array
.const char[]
有一些优点常量超过 const std::string
但它们正在被新的 C++ 标准“解决”:std::string
不能用于 constexpr
语境。所以,我还是更喜欢用 constexpr const char[]
声明全局字符串常量如果我所做的只是将它们传递给某个函数。正如@HolyBlackCat 在评论中提到的,C++17 std::string_view
也使这个用例过时了,尤其是新的 sv
文字:#include <string_view>
using namespace std::literals;
//Compile-time string_view
constexpr auto str = "hello"sv;
const char*
更普遍一些。您可以将其传递给接受 const char*
的函数, std::string
, 或 std::string_view
.反过来需要 std::string::c_str()
如果不复制 std::string_view
,这是不可能的。 .std::string
可能会使用 SSO,但不能保证。这可能与非常小的系统有关,其中堆很宝贵,程序闪存更适合并且无论如何都包含文字。std::string
也是空终止的。总的来说,我的建议是使用
std::string_view
你得到的每一个机会 - 对于任何非拥有的字符串,包括持有字符串文字。最重要的是,它应该取代 const char*
和 const std::string&
函数参数。如果你想拥有一个字符串,使用 std::string
.
关于c++ - 何时在 C++ 中使用字符数组而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65524317/