C++ 学习宝藏网站分享
C++ 学习宝藏网站分享
1. C++ 在线参考手册 Cppreference

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++ 惯用法”。巧了,我的我之前分享的很多篇随笔也都是围绕着这两个话题:
3. 谷歌 C++编码规范(Google C++ Style Guide)

不同于 C++ Core Guidelines 侧重 high-level 的规范,谷歌的这份 C++ Style Guide 包含了很多诸如格式、命名、注释、类、方法、头文件等相对 low-level 的详细编码规范,涉及开发过程的很多方面。每个条目都有优缺点的分析,以及最终的决定及理由。如果你的项目还没有一个编码规范,这是一份很好参考模板。
说句题外话:尽管使用 C++ 异常会带来很多好处,但 Google C++ 规范中不使用异常,因为 Google 现有的大量代码对异常的支持并不是很友好,全面转向异常需要花费大量的时间,且容易出现问题。但是正如规范中提到得那样,如果一切都是从头开始,可能会做出相反的决定。
4. Wandbox

界面简洁的在线编译器。支持多种语言、多种编译器、同一编译器的不同版本,不需要本地搭建环境。
更多时候可能只是遇到拿不准的问题,想写几行代码快速验证一下,但手边没有编译环境,这时 Wandbox 就可以发挥作用了。
5. Compiler Explorer

正如网站名字那样,编译器探索者。可以查看使用不同编译器、不同版本、不同编译选项编译产生的汇编代码,能够自动高亮关联到源码。然而这只是最基本的功能,更多强大的功能等着你自行探索。此外, Compiler Explorer 还提供丰富的模板,同时支持 vim 以及 VSCode 快捷键,也可以作为普通的在线 IDE 使用。
6. C++ Insights
Compiler Explorer 的兄弟网站,能够显示 C++ 代码展开之后的样子。比如可以用它来探究直接初始化和拷贝初始化的区别(没区别),或者 range-for 是如何实现的:

7. Quick Bench
顾名思义,这个网站是用来比较两个代码片段性能的。
注意,代码片段级优化只应该作为最后的优化手段!详见:性能优化的一般策略及方法 一文
汽车行业 C++ 程序员,持续学习,不定期分享,欢迎关注,共同进步!
微信公众号:好记性如烂笔头
C++ 学习宝藏网站分享的更多相关文章
- OI学习之路上的宝藏网站/App分享
OI学习之路上的宝藏网站/App分享 想要变强吗少年?这里有各种我平时收集的网站/App,它们可以帮助你更好地学习算法或者找到解题思路.废话不多说,快来打开新世界的大门罢~ 知识学习 觉得各种知识晦涩 ...
- 【转】【Flex】FLEX 学习网站分享
[转:http://hi.baidu.com/tanghecaiyu/item/d662fbd7f5fbe02c38f6f764 ] FLEX 学习网站分享 http://blog.minidx.co ...
- 12个学习 CSS3 网站布局设计的优秀案例
网络上有很多的 CSS 画廊站点供大家对各类网站作品进行打分和评论,每天有数以百计的优秀网站被推荐上面,这对于网页设计师来说是很好的灵感来源.今天,我们选择了15赢得 CSS 设计大奖的优秀作品,帮助 ...
- 一份最中肯的Java学习路线+资源分享(拒绝傻逼式分享)
这是一篇针对Java初学者,或者说在Java学习路线上出了一些问题(不知道该学什么.不知道整体的学习路线是什么样的) 第一步:Java基础(一个月左右) 推荐视频: 下面的是黑马内部视频,我比较推荐的 ...
- Android学习资源网站大全
https://github.com/zhujun2730/Android-Learning-Resources 整理了一些 Android 的博客链接.学习资源网站.站在巨人的肩膀上,会看得更远.整 ...
- Ruby On Rails 在线学习好网站
最好学习Ruby网站: https://ruby-china.org/ 我的用户名:19920625lsg, 密码为最常用的 Ruby on Rails 教程 http://railstuto ...
- PMBOK 学习与实践分享视频
本系列为自己在学习PMBOK时进行的总结与分享,每一节主要包括两部分: 对PMBOK本身的一个结构笔记和讲解. 对自己项目管理工作的一个总结和思考. PMBOK 学习与实践分享视频内容清单 人力资源管 ...
- TreeGrid 控件集 :delphi 学习群 ---- 166637277 (Delphi学习交流与分享)
delphi 学习群: 166637277 (Delphi学习交流与分享). 群主QQ: 1936431438 TreeGrid 控件集 收集: 1.https://www.lmd.de/produ ...
- kaili Linux学习推荐网站
kaili学习推荐网站 kail中文网:http://www.kali.org.cn/forum.php?gid=67 Kali官方教材:https://kali.training/ Kali Lin ...
- SQL Server 学习博客分享列表(应用式学习 + 深入理解)
SQL Server 学习博客分享列表(应用式学习 + 深入理解) 转自:https://blog.csdn.net/tianjing0805/article/details/75047574 SQL ...
随机推荐
- Llama2-Chinese项目:3.1-全量参数微调
提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式如下所示: "<s>Human: &q ...
- Llama2-Chinese项目:4-量化模型
一.量化模型调用方式 下面是一个调用FlagAlpha/Llama2-Chinese-13b-Chat[1]的4bit压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4 ...
- 前端三件套系例之JQuery——JQuery基础、JQuery选择器、JQuery文本属性样式操作、JQuery操作DOM
文章目录 1 JQuery基础 1. 了解jQuery 1.1 什么是jQuery 1.2 什么事JS类库 1.3 常见JS类库 1.4 jQuery的优势 1.5 jQuery的版本 1.6 jQu ...
- Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)
文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...
- .NET静态代码织入——肉夹馍(Rougamo)发布2.0
肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应 ...
- np.array和np.ndarry 的区别
np.array和np.ndarray都是NumPy中用于创建多维数组的函数. np.ndarray是NumPy中的多维数组类,它是一种可变的数组,可以通过修改数组中的元素来改变其内容.使用np.nd ...
- CSP 2022 游寄
Day -2147483648 官网有了通知,但选手注册不知为何坏掉了: 先开坑: Day -大概两个月 注册了,但老师还没给我审核呜呜呜 第一轮 早上 早上起床就直接来机房了,不用跑操欸嘿. 上午 ...
- CDQ分治(初步入门)
CDQ分治 CDQ分治,传说中是一个神犇创造的算法. 在了解这种算法之前,我们有必要了解一下一种基本的思想:分治. 分治介绍 分而治之,将原问题不断划分成若干个子问题,直到子问题规模小到足以直接解决 ...
- 【Javaweb】四(关于接口类的作用)
这里我们还是以房产信息管理系统的题目举例: 发现在DAO层和service层都有接口类(注:impl是实现类) 为什么要用接口,不直接写实现类: 1.简单.规范性:这些接口不仅告诉开发人员你需要实现那 ...
- 渐进式web全栈:blazor web app
前言 本文要说的这种开发模式,这种模式并不是只有blazor支持,js中有一样的方案next.js nuxt.js:blazor还有很多其它内容,本文近关注渐进式开发模式. 是的,前后端是主流,不过以 ...