muye
2023/02/04阅读:17主题:雁栖湖
登堂入室C++之开篇
1C++发展历史
1979: C++之父Bjarne Stroustrup在写毕业论文期间萌生念头;
1982: 正式开发第一个版本c++,定位为c with class;
1985: 第一个c++的商业实现发布;
1989: C++ 2.0 发布;
1998: C++ 98发布,C++也正式标准化;
2003: C++03版本发布,是C++98版本的小修正版本;
2011: C++11版本发布。C++11之后的被统称为**modern c++**;
2014: C++14版本发布,作为C++11的小修正;
2017: C++17版本发布;
2020: C++20版本发布,提出module,也属于跟C++11一样重大的改变。
2C++是最好的语言吗?
很多地方,很多人,都在争论什么语言是最好的?
个人觉得哪有最好的语言,只有最适合你解决手头问题的语言。
比如要处理一下GoogleSheet,要生成一个几何变幻的GIF图像,python都是非常方便的,使用C++也能完成同样的事情,但是工作量要大很多;要写一个网站,php和go明显要比c和c++合适;如果要一个web服务持续处理高并发访问并不出现短暂的服务拥塞,那rust是比go要合适的。那如果我们要做图形图像处理,又还要兼顾系统管理,那么c++其实是更合适的。
根据问题选语言,方便解决当前问题的语言对于当前问题来说就是最好的语言。
3C++配套工具
IDE
使用比较多的就是Xcode、Visual Studio;
构建系统
CMake、Premake、Ninja、scons等,个人习惯使用cmake,如果从陌生开始选择,也许premake是一个更简单优雅的选择。cmake配合android ndk的toolchain,以及在github上可以下载到的ios-cmake,可以做到不用任何IDE构建windows、mac、linux、android和ios的库和app,配合上vscode编写C++程序又快又方便。
格式化工具
程序要易读和可维护,注释和格式都是很重要的。注释就按照doxygen的规范写就好了,格式可以借助clang-format。在系统装好clang-format工具,然后编写一套适合自己的格式规范(不熟悉的话可以在google的clang-format上进行修改)放到源代码根目录下面,vscode每次保存的时候就格式化一下,把自己的双眼从杂乱的代码中解放出来。美和优雅,这时候需要的只是一个工具而已。
测试库
代码写得多的人才能真的体会到没有单元测试的代码就是噩梦这句话的含义。单元测试大家用得比较多的库就是GoogleTest(简称gtest)以及Catch2。个人更喜欢gtest。个人的忠告就是千万不要以为自己写代码多牛,你的单元测试会告诉你结果。
静态代码检查
CppCheck、cpplint、PVS-Studio、include-what-you-use等。个人大多数时候使用cppcheck分析代码,直接配置在cmake构建链路里面,检查一下还是安全很多。偶尔也使用include-what-you-use,它可以帮你把那些写在代码里面但是没有用到的include找出来。
内存泄漏检测工具
windows上面Visual Leak Detector,linux上面Valgrind。比较坑的是valgrind在比较新的版本的mac系统上是没有办法使用了,从源码编都有问题,现在的解决办法是在docker里面装个linux系统来,有更好办法的同学欢迎一起讨论。
其它常见的库
OpenCV(图像处理)、Eigen(数学计算)、PCL(点云处理)等。详细列表可以参看awesome-cpp上面的介绍。
本文作者:杜凌霄
更多内容发布在公众号“探知轩”,qq讨论群536961869,欢迎关注讨论。
作者介绍