首页 > 编程语言 >C++ 学习宝藏网站分享

C++ 学习宝藏网站分享

时间:2024-01-13 22:56:08浏览次数:39  
标签:std Core 代码 C++ 编译器 https 宝藏 分享

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 库来计算程序执行耗时,想知道如何正确使用各种 clocktime_pointduration_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)

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++ 程序员,持续学习,不定期分享,欢迎关注,共同进步!

标签:std,Core,代码,C++,编译器,https,宝藏,分享
From: https://www.cnblogs.com/tengzijian/p/17963081

相关文章

  • C++源码中司空见惯的PIMPL是什么?
    前言:C++源码中司空见惯的PIMPL是什么?用原始指针、std::unique_ptr和std::shared_ptr指向Implementation,会有什么不同?优缺点是什么?读完这篇文章,相信你能搞懂这种设计方式并将其运用于实践,也将更容易阅读源码。1.PIMPL是什么?PIMPL是PointertoIMPLementation的缩写,意思是指......
  • 图片分享
          ......
  • C++多线程并发(一)--- 线程创建与管理
    目录进程和线程的区别何为并发?C++11线程基本操作C++11新标准多线程支持库std::thread类成员函数std::thread的关键总结C++中多线程创建C++的多线程可以充分利用计算机资源,提高代码运行效率。在这里总结了一些多线程应用过程中的基本概念和用法。进程和线程的区别进程是一......
  • C++实现文件内查找字符串
    实现概要:读取放入buf后查找匹配的第一个字符然后使用seek()移动文件指针,peek()查看剩余的字符是否匹配如果剩余的字符匹配把该字符串在文件中的位置push进一个vector<int>中再继续查看剩余的文件内容//str2.cpp--capacity()andreserve()#include<iostream>......
  • 笑死~我的博客美化脚本分享
    笑死~我的博客美化脚本分享前置提醒本页面使用魔法代码,与其他页面的代码块不同,本页所有代码块不自动换行。使用如下代码实现:<style>.cnblogs-markdownprecode,.blogpost-bodyprecode{white-space:nowrap!important;}</style>基本设置博客皮肤:facebookJS权限:......
  • 从C向C++4——对象特性
    一.构造函数1.构造函数 在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 我们通过成员函数setname()、setage()、setscore()分别为成员变量name、age、score......
  • C++ --- 智能指针
    一、智能指针存在的意义智能指针主要解决以下问题:(1)内存泄漏:内存手动释放,使用智能指针可以自动释放。(2)共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题。 智能指针的实现依赖于C++语言的RAII(资源获取即初始化)技术,即资源的获取和释放应该与对象的构造和析构分......
  • KY199 查找C++
      二分查找,没什么好说的。关键在于排成有序数组。然而C++调用sort就可以了。#include<iostream>#include<algorithm>#include<cstdlib>usingnamespacestd;booljudge(int*A,intn,intt){inthead=0;inttail=n-1;while(head<=tail){......
  • KY158 找xC++
    摆了几天,重新再来学习。‘把数据输入数组,然后遍历数组就行了,没什么难度。#include<iostream>#include<cstdlib>usingnamespacestd;intmain(){intn;while(cin>>n){int*A=(int*)malloc(sizeof(int)*n);for(inti=0;i<n;i++){......
  • 案例分享:游戏行业各岗位的KPI绩效指标制定
    在游戏行业中,岗位种类繁多,每个岗位的职责和要求都有所不同。因此,制定合理的KPI(关键绩效指标)是确保团队高效运作的关键。在竞争激烈的市场环境中,合理的KPI不仅有助于员工明确工作方向,还能促进团队的高效协作。本文将深入探讨游戏行业中策划、美术、程序、运营、测试、市场营销和客......