簡體   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