繁体   English   中英

何时在 c++ 中使用 char 数组而不是字符串?

[英]When to use char array instead of strings in c++?

我们如何区分 c++ 中的字符 arrays 和字符串? char arrays 有什么比 std::string 做得更好吗?

我们如何区分 c++ 中的字符 arrays 和字符串?

你不知道,根据定义,字符串文字是以空字符结尾的字符 arrays。 由于 arrays 第一次有机会衰减为指针,因此const char* (仍然)通常是字符串的同义词。

如果你问什么时候应该写new char[n] ,答案是永远不会。 如果有的话,它应该是std::make_unique<char[]>(n); 除非您正在编写自己的std::string版本,否则请使用标准版本。 如果您需要缓冲区,请使用std::vectorstd::array

const std::string相比, const char[]常量有一些优点,但它们正在被新的 C++ 标准“解决”:

  1. 在 C++20 之前, std::string不能在constexpr上下文中使用。 所以,如果我所做的只是将它们传递给一些 function,我仍然更喜欢用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;
  2. const char*更通用一些。 您可以将其传递给接受const char*std::stringstd::string_view 相反需要std::string::c_str()并且如果不复制std::string_view是不可能的。

  3. 不涉及动态分配。 尽管std::string可能使用 SSO,但不能保证。 这可能与堆很宝贵的非常小的系统相关,并且程序 flash memory 更适应并且无论如何都包含文字。

  4. 与旧图书馆互动。 但即便如此, std::string也是空终止的。

总的来说,我的建议是每次有机会使用std::string_view - 对于任何非拥有字符串,包括持有字符串文字。 最重要的是,它应该替换const char*const std::string& function 参数。 如果您想拥有一个字符串,请使用std::string

当您希望代码同时使用 C 编译器和 ZF6F87C9FDCF8B3C3F07F913F1CEE7 编译器编译时,使用 char arrays 的一个原因(我个人认为这不是一个很好的原因)是用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM