本系列是開源書C++ Best Practises的中文版贷腕,全書從工具、代碼風(fēng)格、安全性冲呢、可維護(hù)性含懊、可移植性、多線程、性能盈电、正確性等角度全面介紹了現(xiàn)代C++項(xiàng)目的最佳實(shí)踐精拟。本文是該系列的第七篇燎斩,也是最后一篇虱歪。
C++最佳實(shí)踐:
正確性
避免無類型的接口
錯(cuò)誤:
std::string find_file(const std::string &base, const std::string &pattern);
正確:
std::filesystem::path find_file(const std::filesystem::path &base, const std::regex &pattern);
上面的方法雖然好點(diǎn),但是仍然存在std::string
和std::filesystem::path
之間的雙向隱式轉(zhuǎn)換栅表。
考慮使用如下類型安全庫:
請(qǐng)注意笋鄙,更強(qiáng)的類型也意味著編譯器可以做出更多優(yōu)化。
啟用腳本
腳本語言和編譯語言的組合非常強(qiáng)大怪瓶,既可以給我們喜歡的編譯語言的好處(類型安全萧落、性能、線程安全選項(xiàng)洗贰、一致的內(nèi)存模型)找岖,又給了我們快速嘗試新東西的靈活性,而不需要完全重新構(gòu)建敛滋。
基于虛擬機(jī)的編譯語言已經(jīng)做到了這點(diǎn): JRuby, Jython, IronRuby, IronPython
- ChaiScript
- AngelScript
- luabind
- sol2(用于Lua的綁定)
- SWIG(簡(jiǎn)化的包裝器和接口生成器)
- pybind11(Python和現(xiàn)代C++互操作性)
延伸閱讀
注: 這系列啟發(fā)了O'Reilly的系列視頻: Learning C++ Best Practices
C++
- The C++ Core Guidelines: 一組關(guān)于C++編程的經(jīng)過驗(yàn)證的準(zhǔn)則许布、規(guī)則和最佳實(shí)踐
- The Ultimate Question of Programming, Refactoring, and Everything: 關(guān)于編程、重構(gòu)以及一切的終極問題
- LLVM Coding Standards: LLVM編碼標(biāo)準(zhǔn)
- C++ Programming Style Guidelines
- Google C++ Style Guide(請(qǐng)注意绎晃,我們沒有遵循谷歌標(biāo)準(zhǔn)文檔提出的某些建議蜜唾,例如,它明確禁止使用異常庶艾,這使得無法實(shí)現(xiàn)RAII袁余。)
- C++ Super-FAQ
- cplusplus
- In-Depth: Static Code Analysis: John Carmack關(guān)于靜態(tài)分析優(yōu)點(diǎn)的文章
- Best Practice For C++ 11/14 Libraries: Nial Douglas的最佳實(shí)踐手冊(cè)
- cppcheck list of checks
- EmptyCrate
- StackOverflow C++ FAQ
CMake
-
CMake Documentation: 請(qǐng)注意,CMake有
--warn
命令行選項(xiàng)咱揍,可以捕捉一些問題颖榜。 - learning-cmake
- Basic CMake usage
- Effective Modern CMake
- It's Time To Do CMake Right
- An Introduction to Modern CMake
結(jié)語
最后,請(qǐng)?jiān)囍鴶U(kuò)展視野煤裙,嘗試其他編程語言掩完。其他語言有不同的構(gòu)造和表達(dá)式,學(xué)習(xí)其他的東西會(huì)鼓勵(lì)我們更有創(chuàng)造性的使用C++积暖,寫出更干凈藤为、更有表現(xiàn)力的代碼。
你好夺刑,我是俞凡缅疟,在Motorola做過研發(fā),現(xiàn)在在Mavenir做技術(shù)工作遍愿,對(duì)通信存淫、網(wǎng)絡(luò)、后端架構(gòu)沼填、云原生桅咆、DevOps、CICD坞笙、區(qū)塊鏈岩饼、AI等技術(shù)始終保持著濃厚的興趣荚虚,平時(shí)喜歡閱讀、思考籍茧,相信持續(xù)學(xué)習(xí)版述、終身成長(zhǎng),歡迎一起交流學(xué)習(xí)寞冯。
微信公眾號(hào):DeepNoMind