C++ MOC
用途:C++ 語言核心的導航層,目前的主軸是從 JavaScript 轉過來時會撞到的語意差異。 上層:Software Engineering MOC
型別與字串
從「引號代表什麼」開始,一路問到「+ 到底在做什麼」:
- C++ 的 char 和 string 是兩個世界,引號不能混用 — 引號決定你拿到基本型別還是標準庫物件
- C++ 的 char 本質是小整數 — 同一件事同時是解題利器(
'c' - 'a')與+的陷阱('a' + 'b'是 195) - C++ 的 string 可以用索引原地修改,JS 的字串不行 —
string是char陣列的直接後果
不可變性
const 在 C++ 是編譯期強制的,比 JS 的 const 嚴格得多:
- C++ 的 const 是深層不可變,JS 的 const 只防重新賦值 — 含
const &傳參,以及「const 穿不過指標」這個例外 - constexpr 是編譯期常數,const 只是執行期唯讀 — 差別是「值什麼時候確定」
- 指標的 const 位置決定是指標不可變還是內容不可變 —
const管它右邊那個東西
慣用法
- C++ 一律寫 ++i,因為後置遞增必須先拷貝一份舊值 — 後置遞增必須回傳舊值,迭代器是物件時那份拷貝是真成本