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
使用标准库算法,代码简洁,意图清晰,表达力强:
// 好
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
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net