我爱" const"。我希望每个变量和方法都应该是常数。 IS" const"。问题在于变量或方法是否应该是常数和#34;取决于调用树中进一步向下的方法/变量。是否有一些工具或某些过程用于静态检查代码体并进行自下而上的整合"?
答案 0 :(得分:6)
我不知道你问题的答案,但我想反对声称
变量或方法“应该是const”取决于调用树中进一步向下的方法/变量
实际上,const应该在逻辑层面上。即如果不应该逻辑地改变,你应该标记const。如果以后,那么您将收到编译器错误,需要重新考虑更改或初始假设的事实。
规则是:
如果某些内容是常量,则不应更改
而不是
如果某事情事实上没有改变,那么让我们把它变成const
答案 1 :(得分:0)
有各种静态分析工具可以做到这一点。想到了Gimpel Flexelint。
说了这些,有可能得到看起来不太合适的结果。例如,鉴于此:
class Wibble {
Some_Implementation_Detail *stuff; //PIMPL idiom
public:
void set_something(int a) { stuff->set(a); }
};
然后可以设置set_something const
。这在技术上是正确的,但不是很有用,因为在这种情况下它根本不是const
。