12

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

代码经过精心设计,运行良好且稳定。

虽然我正在添加一些功能,但对我来说,注意正确性只是普通的做法const

但是,如果我开始声明我的新成员函数const,那么为了使事情正常进行,调整旧代码是没有止境的。

  • const我应该投入大量时间在此代码中引入正确性吗?
  • 更糟糕的是,我必须触摸和更改旧的成熟代码,并向前辈解释我在代码审查期间做了什么。这值得么?
4

7 回答 7

5

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

于 2011-09-29T09:38:31.470 回答
2

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

于 2011-09-29T09:35:44.243 回答
2

const我应该投入大量时间在此代码中引入正确性吗?

如果你觉得你可以在合理的时间内完成这一切,当然可以。const- 正确性是一件好事,所以如果您可以调整代码库以正确使用它,那么这永远不会是坏事。

这一切都取决于您有多少可用时间以及您还可以做什么,这更多是关于项目管理,更适合programmers.SE

更糟糕的是,我必须触摸和更改旧的成熟代码,并向前辈解释我在代码审查期间做了什么。这值得么?

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


编辑

正如 molbdnilo 正确指出的那样,这是一个很大的变化,您绝对应该在开始之前进行一次小组讨论。这比在两周内完成代码审查更合适。

于 2011-09-29T09:46:02.080 回答
1

这是一个困难的问题。改造 const 正确性是一项不平凡的工作(正如您所注意到的)。如果代码在其他方面是干净且可维护的,则可能不应该轻率地进行。另一方面,在某些情况下,const 的正确性几乎是必不可少的——或者,如果所有编译器都强制执行关于不使用临时变量初始化对非 const 的引用的规则,那么这将是必不可少的。

如果您不是代码的唯一所有者,那么要做的就是与其他相关人员讨论该问题,共同决定它是否重要,并在认为重要的情况下安排必要的时间来执行此操作。您不应该做的只是开始自己引入它,作为您被授权进行的更改的“副作用”。这是一个项目级别的决定。

于 2011-09-29T11:02:19.353 回答
0

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

于 2011-09-29T09:38:23.573 回答
0

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

此外,如果您开始遵循 MISRA 之类的规范,它要求您的代码是 const 正确的(以及许多其他内容)。

于 2011-09-29T09:39:52.780 回答
0

强制 const 正确性有两个技术步骤。

不过,在开始之前,您需要让您的团队成员参与进来,并解释正确性的好处const。如果你不能说服你的队友,那真的不值得投入这个……

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

这两个步骤源于以下事实:

  • 您不能在对象上调用非const函数const
  • 您可以const在非`const对象上调用函数

所以:

  1. 标记为const那些功能
  2. const-ify 变量/参数/属性

第一步是非侵入性的,并且已经产生了自己的好处,因为它可以防止在标记方法中意外修改类的内部属性。

即使您在团队中遇到轻微阻力,您仍然可以将您开发或接触的方法标记const为对团队其他成员没有任何阻碍。

于 2011-09-29T13:13:30.323 回答