C++ 学习宝藏网站分享
C++ 學習寶藏網站分享
1. C++ 在線參考手冊 Cppreference
https://zh.cppreference.com
C++ 開發者必備的在線參考手冊,是我最常訪問的 C++ 網站之一。作為參考手冊,不僅包含了語言本身的詞法、語法特性,還包含了對 C++ 標準庫的介紹:需要 include 哪個頭文件、接口參數/返回值說明、參考實現、示例代碼、各家編譯器的支持情況等。
參考手冊就好像字典,對于大多數的開發人員來說,不需要從頭看到尾。點開幾個鏈接,看看里面有哪些內容,大致留個印象,具體用到了某個部分再來查閱即可。
如果一開始看起來有些吃力,就直接放棄了這個 C++ 寶藏網站,實在是太可惜了。可以先看下《C++ Primer》之類的書籍鞏固下基礎,然后再對照著 cppreference 手冊一起看。
場景 1
現代 C++ 有一種說法:“如果你想提高代碼質量,那就用 C++ 標準庫算法替換所有的循環。換句話說,如果你還在寫 for 循環遍歷,說明你對 STL 的算法知之甚少” 。C++ 標準庫中有上百種算法,很難記住所有的算法及其調用方式。但當你打算寫一個遍歷 for 循環的時候,不妨先去 cppreference 上看一眼,多數情況下你能找到更簡潔清晰、質量更高、速度更快的標準庫算法。
例如,計算一個 vector 內所有數據之和:
// 手寫循環遍歷,不好
auto sz = v.size();
for(size_t i=0; i<sz; ++i)
sum += v[i];
使用標準庫算法,代碼簡潔,意圖清晰,表達力強:
// 好
auto sum = std::accumulate(std::begin(v), std::end(v), 0.0);
場景 2
不知道如何測量程序的執行時間,但是又不想使用從百度搜出來的,不知道經歷了幾手轉載于 CSDN 上的,編碼風格很爛、漏洞百出,甚至混雜著 C/C++98 的,勉強能跑,亦或不能跑的代碼。想了解最新的現代 C++ 如何使用 chrono 庫來計算程序執行耗時,想知道如何正確使用各種 clock、time_point 和 duration_cast,比起 CSDN 和百度,我更相信 cppreference。
抄作業,也要抄好學生的作業。
其他場景
如有類似下面的問題,cppreference 都可以快速給出準確、權威的解答。
-
隱約記得
std::string支持查找字串的方法,但記不清方法具體的使用參數、返回值,或者干脆不知道是否支持子串查找 -
std::vector容器的capacity()、reserve()的作用和用法 -
make_unique()和make_shared()哪一個是 C++11 引入的,哪一個是 C++14 引入的? -
項目只支持 C++14,能否使用
std::optional?
2. C++ 核心指南(C++ Core Guidelines)
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
C++ Core Guidelines 是由 C++ 之父 Bjarne Stroustrup 和 C++ 標準委員會主席 Hurb Sutter 領導并維護的開源項目,旨在幫助 C++開發者更高效地使用現代 C++。C++核心指南側重于接口、資源管理、內存管理、并發等影響程序架構設計的高級主題,遵循這些規則可以最大程度地保證類型安全,避免資源泄露及常見的錯誤,讓你的代碼更快、更好。
如果在做 Code Review 的時候,直接貼一個上一個 C++ Core Guidelines 的鏈接,會節省很多力氣,也更有說服力。
吳詠煒老師曾說過:“學習 C++,主要就是學習 C++ Core Guidelines 和 C++ 慣用法”。巧了,我的我之前分享的很多篇隨筆也都是圍繞著這兩個話題:
- C++ 核心指南
- C++ 慣用法
3. 谷歌 C++編碼規范(Google C++ Style Guide)
https://google.github.io/styleguide/cppguide.html
不同于 C++ Core Guidelines 側重 high-level 的規范,谷歌的這份 C++ Style Guide 包含了很多諸如格式、命名、注釋、類、方法、頭文件等相對 low-level 的詳細編碼規范,涉及開發過程的很多方面。每個條目都有優缺點的分析,以及最終的決定及理由。如果你的項目還沒有一個編碼規范,這是一份很好參考模板。
說句題外話:盡管使用 C++ 異常會帶來很多好處,但 Google C++ 規范中不使用異常,因為 Google 現有的大量代碼對異常的支持并不是很友好,全面轉向異常需要花費大量的時間,且容易出現問題。但是正如規范中提到得那樣,如果一切都是從頭開始,可能會做出相反的決定。
4. Wandbox
https://wandbox.org
界面簡潔的在線編譯器。支持多種語言、多種編譯器、同一編譯器的不同版本,不需要本地搭建環境。
更多時候可能只是遇到拿不準的問題,想寫幾行代碼快速驗證一下,但手邊沒有編譯環境,這時 Wandbox 就可以發揮作用了。
5. Compiler Explorer
https://godbolt.org
正如網站名字那樣,編譯器探索者。可以查看使用不同編譯器、不同版本、不同編譯選項編譯產生的匯編代碼,能夠自動高亮關聯到源碼。然而這只是最基本的功能,更多強大的功能等著你自行探索。此外, Compiler Explorer 還提供豐富的模板,同時支持 vim 以及 VSCode 快捷鍵,也可以作為普通的在線 IDE 使用。
6. C++ Insights
https://cppinsights.io/
Compiler Explorer 的兄弟網站,能夠顯示 C++ 代碼展開之后的樣子。比如可以用它來探究直接初始化和拷貝初始化的區別(沒區別),或者 range-for 是如何實現的:
7. Quick Bench
https://quick-bench.com/
顧名思義,這個網站是用來比較兩個代碼片段性能的。
注意,代碼片段級優化只應該作為最后的優化手段!詳見:性能優化的一般策略及方法 一文
汽車行業 C++ 程序員,持續學習,不定期分享,歡迎關注,共同進步!
-
微信公眾號:好記性如爛筆頭
-
博客園:https://www.cnblogs.com/tengzijian
總結
以上是生活随笔為你收集整理的C++ 学习宝藏网站分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#基于ScottPlot进行可视化
- 下一篇: java信息管理系统总结_java实现科