关于c++:DeepRoute-Lab-C大杀器超实用在线工具推荐

39次阅读

共计 1864 个字符,预计需要花费 5 分钟才能阅读完成。

C++ 作为语法最简单、写代码时最须要思前顾后的语言,咱们不在身边顺手备用几个“大杀器”在线工具,可能真的不是很利于工作的发展呐。

置信大家对上面这两个网页曾经十分相熟了,它们是编写代码过程中必不可少的工具宝典。

1. cppreference
2. cplusplus**

上述两个网页次要是提供十分详尽的语法层面的材料。

除此之外,我将从其余各个方面给大家举荐几个绝对小众然而十分实用的在线工具。

置信我,接触了这几个工具后,你肯定会爱上它们的。

实用在线工具 ✦

首先,这几个工具具备如下的通用性能

01 设置运行平台、编译器及版本

x86、x64、arm

gcc、clang

7.5.0、9.4.0,etc

02 设置 C ++ 语言版本

c++11、c++14,etc

03 设置编译优化选项

Og、O1、O2,etc

上面,我将联合本人的应用教训,顺次介绍这几个工具的典型利用场景和应用成果。

从编译器的角度看源码

这就是 C ++ Insight

咱们在写代码的时候,如果不是对 C ++ 规范和编译器一目了然,可能很难晓得编译器在底下到底做了什么。应用 C ++ Insights,能够帮咱们一探到底。

应用花括号初始化,编译器保障了所有的成员函数都会被(递归地)初始化。


帮忙咱们一览 C ++ 14 的 generic lambda expression 是怎么被编译器开展的。

展现了编译器在用户不自定义构造函数时,会主动生成对应的构造函数(到这里一切正常)。

这里仅仅是在原有代码中新增了一个默认析构函数,如果没有看到编译器生成的代码,可能很难设想挪动构造函数基本不会生成吧?起因是什么呢?能够自行搜寻一下 rule of five 和 rule of zero。

具体到这个例子,因为如果你的类外面只申明了自定义的 / 默认的 copy (ctor & assignment operator) 或者 destructor,那么他们会 suppress 编译器生成默认的 move (ctor & assignment operator)。

联合 C ++ Insights,咱们能够很不便地领会模板参数匹配和援用折叠。

实时汇编剖析

这就是赫赫有名的 Compiler Explorer

它次要用来做实时汇编的生成,帮忙咱们疾速剖析代码片段在不同设置下的汇编代码生成,疾速提供代码优化方向,并阻止咱们自作聪明地去优化代码,感触编译器的弱小。


下面两张图通知咱们不要在古代编译器背后班门弄斧……

clang 真是威力无穷啊,间接返回了编译器的后果。


下面两张图展现了比照开启和敞开 copy elision 后,函数按值返回的汇编后果。

限于篇幅限度,大家能够本人写一些其余的代码试验一下。

通常而言,在剖析代码的时候,联合 C++ Insights 和 Compiler Expolrer 会有十分好的成果。

Run-time Benchmark

这就是基于 Google Benchmark 的 Quick C++ Benchmark

咱们可能常常须要对一些代码片段进行性能测试,然而因为测试数据的筹备比拟麻烦或者难以保障覆盖度,为了疾速探索不同计划的性能差别,咱们能够抉择应用它。

在应用 std::string 的时候,咱们常常会疏忽它在返回值和返回援用时候的性能差别。

回到第一个工具的最初一个例子,这里通过 Quick C++ Benchmark 联合更详尽的代码来展现一些语言细节带来的显著性能问题。

能够看到,一个无意间的默认析构函数的定义,可能对代码的性能存在意想不到的影响。

同时,咱们能够在由 C++ Insights 生成的后果(“肝”到了早晨,背景都变成了夜间模式)中失去印证。

更进一步,通过 Compiler Expolrer,咱们能够间接从汇编层面看清楚调用关系。


【划重点】能够听从 rule of zero 的时候,请肯定听从。

当咱们正文掉 Test1 的默认析构函数后,在误差范畴内,能够看到,两者的性能曾经统一了。

这三个工具具备十分好的关联性,能够从 C++ Insights 和 Quick C++ Benchmark 跳到另外两个工具中去。


除了上述提到的这些在线工具以外,还有很多其余好用的工具,例如 Compare C++ Builds、OnlineGDB 等等。前者能够帮忙咱们比拟不同代码的编译速度,后者能够提供在线的单步调试环境。因为篇幅限度和绝对小众,这里就不再赘述了。

同时,大家能够看到,上文重点介绍的这些在线工具,都能够从不同的角度提供性能剖析和优化的方向,大家能够缓缓领会和感触。

本文旨在抛砖引玉,给大家提供一些在线工具的视角。限于作者程度问题,文中必定有不少脱漏和谬误指出,心愿大家不吝指正。

文中的示例代码在下方图片里展现啦~

正文完
 0