[英]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::vector
或std::array
。
与const std::string
相比, const char[]
常量有一些优点,但它们正在被新的 C++ 标准“解决”:
在 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;
const char*
更通用一些。 您可以将其传递给接受const char*
、 std::string
或std::string_view
。 相反需要std::string::c_str()
并且如果不复制std::string_view
是不可能的。
不涉及动态分配。 尽管std::string
可能使用 SSO,但不能保证。 这可能与堆很宝贵的非常小的系统相关,并且程序 flash memory 更适应并且无论如何都包含文字。
与旧图书馆互动。 但即便如此, 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.