Visual C++ 為讓程式設計師在 Windows 上自由使用 C++ 可謂「煞費苦心」,卻因歷史包袱與架構選擇長期飽受爭議。本文針對五大核心爭議點逐一剖析,還原技術脈絡。
要求 VC6 完整支援 C++98 猶如「要求山頂洞人狩獵必帶許可證」。後續版本(VC7.1 以降)支援度已超 98%,學習標準 C++ 請拋棄 VC6。
補充:2003 年 ISO 釋出 C++03(勘誤版),語法無變化,純修正錯誤。
反駁:體積增長換取的是——
儲存成本極低的今天,體積不應成為否決理由。
MFC 將 Windows 物件高度封裝,導致:
將輕量、通用的類別(CString、智慧指標、集合)下沉到 ATL,不再強制依賴 MFC 環境。現代 VC++ 專案可僅鏈結 ATL 即使用核心工具類。
Java 可輕鬆實現執行時類型識別(RTTI)與反射:
Class clazz = obj.getClass();
Object instance = clazz.newInstance();
C++ 原生不支援,VC++ 引入 CObject、CRuntimeClass、巨集 DECLARE_DYNCREATE 等機制模擬反射。這套體系:
CObject 根類別,難以移植String^ s = gcnew String("Hello"); // 托管參考型別
List^ list = gcnew List();
/ 象徵橋接)舊 C++ 代碼可漸進式遷移:核心邏輯保留 Native,邊界層用 C++/CLI 包裝暴露給 .NET 應用層。
VC++ 的爭議本質上是「專有生態 vs 開放標準」的張力。理解其歷史脈絡、架構取捨,才能在技術選型時做出理性判斷——無論是堅持 Native C++、擁抱 C++/CLI、轉向 Qt/標準庫,還是跨平台部署。
本文出自 “白喬博客” 博客,請務必保留此出處 https://bluejoe.blog.51cto.com/807902/192763