圈复杂度为理解给定函数的难易程度或包含错误的潜力提供了一个粗略的衡量标准。在我读过的实现中,通常所有基本的控制流构造(if、case、while、for 等)都会将函数的复杂度增加 1。在我看来,圈复杂度旨在确定“通过程序源代码的线性独立路径的数量”虚拟函数调用也应该增加函数的圈复杂度,因为在运行时将调用哪个实现的模糊性(调用在路径中创建另一个分支执行)。
但是,如果函数包含等效的 switch 语句(每个“case”关键字一个点,实现相关虚函数的层次结构中的每个类一个 case 关键字),对函数进行相同的惩罚,感觉过于苛刻,因为虚函数调用通常被认为是更好的编程实践。
虚函数调用的圈复杂度成本应该是多少?我不确定我的推理是反对将圈复杂度作为度量的效用,还是反对使用虚函数或不同的东西。
编辑:在人们的回应之后,我意识到它不应该增加圈复杂性,因为我们可以认为虚函数调用等同于对包含大量 switch 语句的全局函数的调用。即使该函数会得到一个坏分数,它在程序中只存在一次,而直接用 switch 语句替换每个虚拟函数调用会导致多次成本。