是否值得插入`const`-correctness

时间:2011-09-29 09:33:09

标签: c++ coding-style const-correctness

我目前面临的是一些由大约400个文件和200个类组成的高级程序员编写的C ++项目。

代码精心编写,工作正常,稳定。

虽然我正在添加一些功能,但对我而言,通常的做法是关注const - 正确性。

但是如果我开始声明我的新成员函数const,那么为了使事情有效,适应旧代码是没有尽头的。

  • 我应该投入时间来介绍const - 正确性 进入这段代码?
  • 更糟糕的是,我必须触摸并改变旧的成熟代码并解释 对于老年人我在代码审查期间所做的事情。值得吗?

7 个答案:

答案 0 :(得分:5)

Const正确性是静态类型的一种附加层,旨在使开发成熟,可靠和健壮的代码变得更加容易。你说你已经有了后者。在这种情况下,从实用的角度来看,在这样的代码库中强制执行const正确性似乎并没有显着的增值。

答案 1 :(得分:2)

值得努力......除非你有更重要的事情要做。

答案 2 :(得分:2)

  

我是否应该花费一定的时间将const - 正确性引入此代码?

如果您认为可以在合理的时间内完成所有工作,请务必确定。 const - 正确性是一件好事,所以如果您可以调整代码库以正确使用它,那么这永远不会是坏事。

这一切都取决于你有多少时间可用以及你可以做的其他事情,更多的是项目管理,更适合programmers.SE

  

更糟糕的是,我必须触摸并改变旧的成熟代码,并向老年人解释我在代码审查期间所做的工作。值得吗?

对于他们(并且,通过扩展,对其他所有人来说)当然是值得的。听起来他们会在代码审查中学到很多东西,这太棒了!


修改

正如molbdnilo正确地指出的那样,这是一个很大的变化,你应该在开始之前进行小组讨论。这比在两周后完成代码审查更合适。当你已经完成时。

答案 3 :(得分:1)

这是一个棘手的问题。改进const正确性是一件非常重要的事情 工作(正如你所注意到的)。如果代码是干净的 可维护的,可能不应该轻易进行。在另一 在某些情况下,const正确性几乎是必不可少的 如果所有编译器都强制执行关于不初始化a的规则 用临时的非const引用。

如果您不是代码的唯一所有者,那么该做的事情就是 与其他相关人员讨论这个问题,共同决定 是否重要,如果有的话,编制必要的时间 被认为是重要的。你不应该做的只是开始介绍它 你自己,作为你被授权做的变化的“副作用”。 这是一个项目层面的决定。

答案 4 :(得分:0)

是的,是的。由于多种原因,const正确性是一件好事,其中有助于防止错误。实际上,我已经在类似于你的情况下应用const正确性时发现了错误。

答案 5 :(得分:0)

是。一旦你克服了将当前代码转换为const的障碍,它就变成了第二天性。

此外,如果您开始遵循像MISRA这样的规范,它需要您的代码是正确的(在许多其他事情中)。

答案 6 :(得分:0)

强制执行const-correctness有两个技术步骤。

在开始之前,您需要让您的团队成员参与进来,并解释const - 正确性的好处。如果你无法说服你的队友,那真的不值得推出......

现在,由于我们使用的是StackOverflow,而不是SE,我宁愿专注于技术方法。

这两个步骤来自以下事实:

  • 您无法在const对象
  • 上调用非const函数
  • 您可以在非`对象
  • 上调用const函数

因此:

  1. 标记为const
  2. 的那些功能
  3. const - ify变量/ parameters / attributes
  4. 第一步是非侵入性的并且已经产生了它自己的好处,因为它可以防止在标记方法中对类的内部属性进行意外修改。

    即使您的团队遇到轻微的阻力,您仍然可以将您开发或触摸的方法标记为const而不会对团队其他成员造成任何阻碍。