C++ vs Python

C++ switch vs Python match

  • C++

    • 不一定逐行比對。當 case 是連續的整數,編譯器可能使用 jump table 執行時直接跳轉

    • 如果 case 較複雜,編譯器可能退回使用類似 if-else 的策略但仍會做最佳化

  • Python

    • 是逐行比對。因為 Python 是直譯式語言,match-case 就像結構化的 if-elif

特性

C++ switch

Python match

執行方式

編譯後可轉為 jump table(快速跳轉)

逐行比對模式(interpreted 解譯執行)

支援的資料型別

整數、enum(編譯時期常數)

幾乎所有型別:數值、字串、類別、結構化資料等

語法彈性

語法固定,僅支援簡單常數 case

支援模式比對、結構解構、型別檢查、守衛條件等

執行效能

效能高,視編譯器最佳化而定

效能較低,但可讀性與表達能力極高

C++ unordered_map vs Python defaultdict

  • C++ unordered_map 其實是比較像 Python 的 defaultdict,第一次用新的 key 呼叫 operator[] 時不會出現 key error 而是會有一個預設值。下面這個是可以跑的 d['c'] 的值會變成 1

#include <unordered_map>

std::unordered_map<char, int> d;

d['c']++;