首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 編碼規範全指南:命名、風格、類設計、STL 與工程落地

     編輯:C++ 入門

C++ 編碼規範全指南:命名、風格、類設計、STL 與工程落地

一、命名規範體系

實體規則正例反例
類/結構體/枚舉/類型定義PascalCaseLine, SavingsAccountline, savings_account
變量/函數參數camelCaseline, savingsAccountLine, line_width
函數/方法動詞 camelCasegetName(), computeTotalWidth()GetName(), compute_total_width()
常量/枚舉值UPPER_SNAKE_CASEMAX_ITERATIONS, COLOR_REDmaxIterations, colorRed
類私有成員camelCase + 下劃線後綴length_m_length, _length
命名空間lowercasemodel::analyzerModel::Analyzer
接口類I + PascalCaseIFooFooInterface
模板參數單大寫字母template<class T>template<class Type>
縮略語按單詞大小寫exportHtmlSource()exportHTMLSource()
全局變量camelCase,用 :: 訪問::mainWindow.open()mainWindow.open()
文件名lowercase .cpp/.hline.cpp, line.hLine.cpp

二、代碼風格核心原則

  • 正確性 > 簡單性 > 清晰性 > 性能(KISS 原則)
  • 杜絕 22 種「代碼壞味道」(重複代碼、長函數、大類、長參數列、發散式變化、霰彈式修改、依戀情結、數據泥團、基本型別偏執、switch 驚悚、平行繼承、冗贅類、誇誇其談未來性、令人迷惑的暫時變量、過度耦合消息鏈、中間人、狎昵關系、異曲同工類、不完善庫類、純稚數據類、被拒絕的遺贈、過多註釋)
  • 編譯器最高警告級別(VC /W4),警告即錯誤
  • 相對路徑 include,Debug/Release 輸出分離(Debug 後綴 d)

三、頭文件規範

  • 擴展名 `.h`
  • 防重復包含:#ifndef PROJECT_PATH_FILE_H_(跨平台優於 `#pragma once`)
  • 前置聲明減少依賴,加快編譯
  • 內聯函數 ≤ 10 行
  • 參數順序:輸入參數在前,輸出參數在後
  • 包含順序:C 庫 → C++ 庫 → 第三方庫 → 項目內部
  • 實現文件優先包含對應頭文件(驗證自包含性)

四、作用域管理

  • .cpp 使用未具名命名空間隔離內部符號
  • 局部變量最小作用域,聲明處初始化
  • 禁止 class 類型全局/靜態變量(構造/析構順序未定義)
  • 全局字符串用 const char* 非 std::string
  • 單例模式替代必要的全局狀態

五、類設計準則

  • 小類優於大類,組合優於繼承
  • 構造函數初始化列表順序 = 聲明順序
  • 單參數構造函數加 explicit
  • 構造/析構中禁用虛函數調用
  • 接口類:純虛函數 + virtual ~IFoo() {}
  • 慎用運算符重載
  • 數據成員私有,提供存取器
  • 聲明順序:public → protected → private;塊內:typedef/enum → 常量 → 構造 → 析構 → 成員函數 → 數據成員
  • 函數短小、單一職責
  • 智能指針:優先 scoped_ptr,容器用 shared_ptr,禁用 auto_ptr
  • 引用參數必加 const,輸出參數用指針
  • 禁用缺省參數、C++ 異常、RTTI(單測除外)
  • 類型轉換:static_cast/const_cast/reinterpret_cast/dynamic_cast(僅測試)
  • 迭代器/模板用前置 ++/--
  • 盡量 const
  • 宏謹慎,優先 inline/enum/const
  • sizeof(var) 代替 sizeof(type)
  • 只用認可的 Boost 庫

六、STL 容器最佳實踐

  • 默認 vector
  • vector/string 替代原始數組
  • C API 交互用 vector.data()/string.c_str()
  • 容器存值或智能指針
  • 序列擴展用 push_back
  • 算法/比較器參數優先函數對象(仿函數)

七、DLL 與多線程

  • 內存分配/釋放同模塊(DLL 內 new,DLL 內 delete)
  • DLL 避免全局變量
  • 多線程最小化共享數據

八、版本控制(SVN)

  • 提交必寫日志
  • 提交前 Debug/Release 雙編譯通過
  • 修改前先 update

九、註釋規範

  • 統一 // 註釋 風格
  • .h 註釋接口契約,.cpp 註釋實現細節
  • Doxygen 標籤:@brief @param @return @author
  • 變量註釋獨佔行放上方
  • 最好的代碼是自文檔化的,註釋為維護者而寫
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved