C++ 的 char 和 string 是兩個世界,引號不能混用

在 JavaScript 裡,單引號 'a' 和雙引號 "hello" 本質上都是字串型別(String,JS 沒有獨立的字元型別)。C++ 不是這樣——char 和 string 是完全不同的兩個世界,而引號決定你拿到哪一個。

特性charstd::string
引號規定嚴格使用單引號 'a'嚴格使用雙引號 "a"
本質基本型別(primitive)標準庫物件(class object),本質是動態包裝的 char 陣列(底層類似 vector<char>)
記憶體大小固定 1 byte動態配置(標頭約 24~32 bytes + 字元內容)
能裝什麼恰好一個字元(底層是 ASCII 數字)0 到幾百萬個字元,長度動態調整
常用場景單一字元比對、計數陣列的索引傳遞單字、整體比對、串接文字
JS 對照無(要用長度為 1 的字串模擬)String
char c = 'a';        // 正確:單引號,單一字元
string s = "a";      // 正確:雙引號,長度為 1 的字串
 
char error1 = "a";   // 編譯錯誤!雙引號是 string(const char*),塞不進 char
string error2 = 'a'; // 編譯錯誤!不能直接把 char 當成 string 賦值

兩個型別不能互相賦值,連「長度為 1 的字串」和「一個字元」都不行。這是從 JavaScript 轉 C++ 最先撞到的一道牆。

char 之所以能當計數陣列的索引,見 C++ 的 char 本質是小整數;string 能被原地修改的性質見 C++ 的 string 可以用索引原地修改,JS 的字串不行。