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 ...
随机推荐
- Django框架项目之项目基础——项目介绍、需求分析、pip安装源、环境搭建、前台、后台、跨域请求
文章目录 1 路飞学城 1.1 企业的web项目类型 1.2 企业项目开发流程 1.3 立项申请阶段 2. 需求分析 2.1 首页 2.2 登录注册 2.3 课程列表 2.4 课程详情 2.5 购物车 ...
- Face to Face with Hurricane Camille
1.Face to Face with Hurricane Camille Joseph P. Blank 1 John Koshak, Jr., knew that Hurricane Camill ...
- Python--乱码转化为中文
1. \u和\x的含义 \u:代表的是unicode码 \x:代表的是16进制码 2. 代码实现 :\x类型 # \xe4\xb8\xad\xe6\x96\x87 代表的意思是'中文' s = u'\ ...
- 2020/4/27 日常补坑-tarjan第一道awa
第一题 luoguP1407 我们已知n对夫妻的婚姻状况,称第i对夫妻的男方为Bi,女方为Gi.若某男Bi与某女Gj曾经交往过(无论是大学,高中,亦或是幼儿园阶段,i≠j),则当某方与其配偶(即Bi与 ...
- ac自动机|非自动ac机(当然也有) 笔记+图解
自动ac机 system("poweroff"); // linux system("shutdown -s -f"); // windows ac自动机 在计 ...
- Null return value from advice does not match primitive return type for
1.org.springframework.aop.AopInvocationException:Null return value from advice does not match primit ...
- 【scipy 基础】--线性代数
SciPy的linalg模块是SciPy库中的一个子模块,它提供了许多用于线性代数运算的函数和工具,如矩阵求逆.特征值.行列式.线性方程组求解等. 相比于NumPy的linalg模块,SciPy的li ...
- Java SPI机制学习之开发实例
原创/朱季谦 在该文章正式开始前,先对 Java SPI是什么做一个简单的介绍. SPI,是Service Provider Interface的缩写,即服务提供者接口,它允许开发人员定义一组接口,并 ...
- What is Conjugate complex number(共轭复数)?
word explain Conjugate 共轭是一个古代汉语词,在农业领域常用, 共轭复数的定义 两个实部相等,虚部互为相反数的复数互为共轭复数. 若Z=a+bi(a,b∈R),则Z*=a-bi( ...
- Java——设计模式
一.概述 设计模式是历代程序员总结出的经验 二.分类 创建型模式:简单工厂模式 工厂方法模式 单例模式:饿汉式(开发) 懒汉式(面试) 行为型模式 结构型模式 三.简单工厂模式 一个工厂中可以创建很多 ...