【发布时间】:2016-05-09 22:06:17
【问题描述】:
在我参与的代码审查中经常出现的一件事是代码中内联的“幻数”是一件坏事。
首选是在某处分配一个符号。
现在我正在使用的是 QT sdk。类成员 QButtonGroup.checkedId() 将返回 -1 作为一个幻数,表示所选组中没有单选按钮。
如果我写类似
if ( buttongroup->checkedId() == -1 )
{
//yadda yadda
}
它将出现在代码审查中。
虽然我当然可以定义一个const static int 符号来给我-1,但如果它定义了相关的常量,我更愿意在Qt 命名空间中使用它。
这样的符号已经定义了吗??
【问题讨论】:
-
我不知道它是否有帮助,但通常我使用“
-
imo,
enum { INVALID_ID = -1 }会比const static int解决方案更好。但有同样的缺点:无论你在哪里使用,你都必须在定义中包含文件。与零进行比较也是一个不错的选择。 -
贵公司/组织对处理来自外部库的幻数有什么政策?请注意,Qt 中的许多类使用 -1 来表示“未定义”、“错误”等,因此 QButtonGroup 不是唯一的。
-
我通常会在 .cpp 文件中添加一个匿名命名空间并在其中放置一个常量,但这纯粹是为了一个只能在该 .cpp 中使用而在其他任何地方都不会使用的值。如果您在其他地方使用 checkedId() 调用,您可能希望将其作为预定义常量移出到某个 Utility 标头?
-
我通过选择使用
isChecked()来避免这个特殊问题,这将返回一个指向选中的(抽象)按钮的指针,或者为零。所以现在我可以比较零或NULL,这是一场完全不同的代码审查象征性的持续战争。 NULL 被载入内部编码标准,但 0 被载入标准,例如纯虚拟。但它已经出现在讨论中