C++ 模板程式碼膨脹優化:提取參數無關程式碼至基類別
問題 模板每種具現化型別都會產生完整程式碼,導致程式碼膨脹。若部分邏輯與模板參數無關,應提取至非模板基類別。 技巧:私有繼承基類別 + inline 轉發 /
C++ Boost scoped_array 智慧指標陣列管理
特性 管理動態陣列(new T[n]),析構時自動 delete[]。 不可複製(non-copyable),可移動(C++11 移動語意)。 提供 oper
C++ 編譯錯誤:strdup was not declared in this scope
原因 strdup 為 POSIX / GNU 擴充函式,非 C++ 標準庫函式。GCC 預設 -std=c++11 嚴格模式下不宣告。 解決方法 編譯選項
C++ 容器 erase 迭代器失效與正確刪除元素
現象 vector::erase 會使被刪除元素及其後所有元素的迭代器失效,並回傳指向下一個元素的有效迭代器。若在迴圈中直接 erase 且不更新迭代器,會漏刪
C++ 派生類別存取模板化基類別成員的三種方法
問題 模板基類別的成員在派生類別中不可直接存取(this->member 或 member 編譯錯誤),因模板具現化可能移除該成員,編譯器無法於定義期驗證
C++ 類別成員宣告順序決定初始化順序
規則 成員初始化順序永遠遵循宣告順序,與建構函式初始化列表寫入順序無關。若初始化列表順序與宣告順序不符,編譯器會發出警告(-Wreorder),且可能導致使用未
C++ 顯式介面與執行期多態 vs 隱式介面與編譯期多態
類別與物件導向 顯式介面:標頭檔可見的公開成員函式簽名。 執行期多態:虛擬函式 + 基類別指標/參考,執行期動態綁定。 模板與泛型程式設計 隱式介面:模
C++ 透過私有繼承復用實作類別實現工廠函式
架構 介面類別 IPerson:純虛擬介面。 實作類別 PersonInfo:具體資料與格式化邏輯。 具體類別 CPerson:public IPerson,
C++ 虛擬繼承詳解:菱形繼承與記憶體配置
菱形繼承問題 兩個基類別共同繼承同一頂層基類別,最底層派生類別會包含兩份頂層基類別子物件,造成資料重複與存取模糊。 虛擬繼承解決 中間層以 virtual p
C++ 判斷資料夾是否存在(Windows API)
方法:GetFileAttributesA #include <windows.h> bool dirExists(const string&
C++ explicit 關鍵字:防止隱式轉換的建構函式
用途 標記單參數建構函式(或多參數但有預設值)為 explicit,禁止隱式轉換,避免函式呼叫時發生非預期的型別轉換。 程式碼 /**************
C++ 介面繼承與實作繼承:純虛擬、虛擬、非虛擬函式
三種繼承語意 純虛擬函式(= 0):僅繼承介面,派生類別必須實作。可提供預設實作,但需以 Base::func() 明確呼叫。 虛擬函式:繼承介面與預設實作,
C++ MinGW 編譯錯誤:off64_t does not name a type
原因 MinGW 部分版本在 -std=c++11 下,io.h 使用未定義的 off64_t 型別。 修正方法 編輯 {MinGW 目錄}/include/