编程参考 - C++ Code Review: 一个计算器的项目

GitHub - jroelofs/calc: Toy Calculator

Toy Calculator

1,拿到一个project,第一眼看,没有配置文件,说明没有引入持续集成系统,continuous integration system。

2,然后看cmake文件,使用的子文件夹、编译标准、Unit Test、要编译的Target。

3,项目的clean命令。

4,先看测试功能的部分。

5,包含项目内的头文件时,使用的是相对路径。便于代码移植。

6,使用了gtest框架。

7,使用fuzz testing,在分析用户提供的输入功能时使用。(libFuzzer工具)。用户通过某个input Entry point来提供各种随机数据。

8,使用if语句,需要大括号,curly brace。单行语句时,

9,Team work时,你提交的代码,创建的pull request,有别人帮忙review,如果自己一个人的话,也最好遵循这个流程。就是自己给自己Review,然后再Merge。

10,如果析构函数为空,可以设置:virtual ~Lexer( ) = default;

11,可以删除copy构造函数。Lexer &operator=(const Lexer &) = delete;

12,还有Lexer(const Lexer &) = delete; 因为不需要,还会在多态时引起不必要隐患。

13,use powerline shell for bash

14,可以实用线上编译, Compiler Explorer

15,sliced: 一个全新创建的对象,只从派生类取得一部分内容,别的可以用到多态的内容就不要了。在构造或赋值时发生。

16,父类删除了copy constructor, move constructor, copy assignment, move assignment,子类中也会自动删除。

17,父类析构函数是virtual的,那子类的析构函数也自动就是virtual。

18,rule of zero is to avoid defining any special member function. 不想有任何的copy构造函数、copy assignment、move assignment、move构造以及虚析构函数等。

19,如果在一个项目里,使用pragma once,里面基本只是symlinks,你会很痛苦。

20,使用nvim编辑文件。

21,使用decltype( )

22,just be consistent, 比如给类取命时,是Vector_Lexer还是VectorLexer,都可以保持统一即可。

23,类的成员定义,两个变量还是放到两行较好。

24,类的成员定义: int Line{0};

25, [[nodiscard]] virtual bool empty( ) const = 0; 表示我调用这个函数,但不使用这个函数的返回值,则表示这是一个bug。

如下所示,编译时会报一个warning:

26,如上面函数,如果需要,就要加上const。还有前面加上constexpr (C++ 20).

\[nodiscard\]\] constexpr virtual bool empty( ) const = 0; 27,CMAKE_CXX_STANDARD is set C++ 17 28, std::isspace( static_cast\ (c ) ) 29, GCC里有个__builtin_unreachable( ); , 用在switch case中。这样影响移植。 30,如果switch case里有异常的case,可以实使用assert或者抛出异常。 参考: 1,Youtube C++ Weekly [https://www.youtube.com/watch?v=rFnRzW3vvsQ\&list=PLs3KjaCtOwSYh2X7z0mxUbArhW1O4_4z1](https://www.youtube.com/watch?v=rFnRzW3vvsQ&list=PLs3KjaCtOwSYh2X7z0mxUbArhW1O4_4z1 "https://www.youtube.com/watch?v=rFnRzW3vvsQ&list=PLs3KjaCtOwSYh2X7z0mxUbArhW1O4_4z1")

相关推荐
weixin_404551244 天前
使用implementation-verificator Skill来harness plan和code的一致性
ai·代码复审·code·skill·plan
奇树谦4 天前
AbsInt Launcher 详细介绍
代码复审
zhangfeng11338 天前
适合 5人以内小团队的Git 工作流 + Code Review + 自动化部署方案 FastAdmin +linunx服务器宝塔系统 外包项目 —
服务器·git·自动化·php·代码复审
SKY -dada11 天前
Understand 使用教程
开发语言·c#·流程图·软件构建·敏捷流程·代码复审·源代码管理
剑飞的编程思维20 天前
架构评审核心维度自查表
架构·个人开发·代码复审
东方隐侠安全团队-千里23 天前
DataGear 源码审计记录:我重点看了两条危险链
安全·代码规范·代码复审
极客小云23 天前
【AiCodeAudit 2.0 发布:基于调用图与局部子图的 AI 代码安全审计平台】
人工智能·网络安全·语言模型·大模型·github·安全性测试·代码复审
彭波3961 个月前
Steam致命错误failed to load steamui.dll?磁盘写入错误怎么解决?steam安装游戏为什么磁盘写入错误?提供一些可问题解决方案
游戏·阿里云·电脑·开源软件·代码复审
剑飞的编程思维2 个月前
技术评审方法与流程全解析-如何做好技术评审
git·架构·个人开发·学习方法·技术美术·代码复审
ofoxcoding2 个月前
OpenClaw Skill 技能开发教程:从零写一个 Code Review 技能,2026 实战版
ai·代码复审