CppCoreGuidelines ES.2 请使用适当的抽象机制
06 March 2023
“Prefer suitable abstractions to direct use of language features”
理由
恰当的抽象(如库、类)比纯语言功能更接近应用概念。产生更短、更清晰、更可测的代码。
例子
vector<string> read1(istream& is) // good { vector<string> res; for (string s; is >> s;) res.push_back(s); return res; }
更传统和底层的实现方式代码更长、更混乱、更难写正确、可能速度更慢:
char** read2(istream& is, int maxelem, int maxstring, int* nread) // bad: verbose and incomplete { auto res = new char*[maxelem]; int elemcount = 0; while (is && elemcount < maxelem) { auto s = new char[maxstring]; is.read(s, maxstring); res[elemcount++] = s; } *nread = elemcount; return res; }
如果再增加一些溢出检测和错误处理代码,程序会变得更加杂乱,还有个问题,我们还必须记得删除返回的指针和 C 风格的字符串数组。
强化
- 检查杂乱循环、嵌套循环、长函数、缺少的函数调用、少用内置类型的地方。还有圈复杂度。