5

我喜欢“常量”。我希望每个“应该是 const”的变量和方法都是“const”。问题是变量或方法是否“应该是 const”取决于调用树中更下方的方法/变量。是否有一些工具或一些过程来静态检查代码体并进行“自下而上的 en-const-ification”?

4

2 回答 2

6

我不知道你的问题的答案,但我想反对这样的说法

变量或方法是否“应该是 const”取决于调用树中更下方的方法/变量

实际上, const 应该处于逻辑级别。即,如果不应该在逻辑上更改某些内容,则应将其标记为 const。如果稍后是,那么您将收到编译器错误,并且需要重新考虑更改的事实或您的初始假设。

规则是:

如果某事是 const,则不应更改

而不是

如果某些东西实际上没有改变,那么让我们让它成为 const

于 2013-05-24T14:47:03.243 回答
0

有各种静态分析器工具可以做到这一点。Gimpel Flexelint 浮现在脑海中。

话虽如此,有可能得到看起来不太正确的结果。例如,鉴于此:

class Wibble {
   Some_Implementation_Detail *stuff; //PIMPL idiom
  public:
   void set_something(int a) { stuff->set(a); }
};

然后可以制作 set_something const。这在技术上是正确的,但不是很有帮助,因为const在这种情况下它根本不符合逻辑。

于 2013-05-24T16:16:02.633 回答