Const正确性警告c ++

use*_*409 21 c++ const compiler-warnings

有没有人知道C++编译器提供的任何警告有助于强制执行const正确性?例如,任何包含非const参数的C++方法产生的警告会很好,该参数在方法内部永远不会被修改.我看到有一个名为-Wsuggest-attribute = const的gnu编译器警告; 但是,当我使用此标志时,我收到一条错误消息,表示无法识别.有什么想法吗?

Luc*_*ore 7

我不认为存在这样的警告,主要是因为它没用.仅仅因为参数未在调用中被修改,并不意味着它应该const只是为了它.

想想virtual功能.也许是基类的设计师,但在基类中不修改参数,想要离开它的延伸类是否要修改参数.

另外,考虑大型应用程序,其中修改接口或API或任何成本很多.您现在可能不需要修改参数,但将来打算这样做.你现在不打算这样做const,强制进行完全重建,并且当你删除它时,将来可能会冒错误const.

  • 我明白你的意思了; 但是,我仍然认为这可能是一个有用的警告(也许不是错误).此外,似乎有一个名为-Wsuggest-attribute = const的gnu编译器的标志; 但我的g ++编译器无法识别它. (2认同)

bit*_*ask 5

小心,const像这样的参数:

void myFunc(int const param);
Run Code Online (Sandbox Code Playgroud)

属于接口.它属于函数实现的本地范围.实际上,这个功能:

int inc(int const param) { return param+1; }
Run Code Online (Sandbox Code Playgroud)

可以声明为

int inc(int param);
Run Code Online (Sandbox Code Playgroud)

声称有权修改变量但实际上没有这样做,这并不违反const正确性范式.

如果您担心,const_cast您可以首先使用它,或者只是grep在代码库中使用它.


小智 5

-Wsuggest-attribute=const
Run Code Online (Sandbox Code Playgroud)

此分析需要选项

-fipa-pure-const
Run Code Online (Sandbox Code Playgroud)

默认情况下启用

-O 
Run Code Online (Sandbox Code Playgroud)

和更高