我正在对VS C ++项目进行一些维护,我经常看到静态成员函数被用作类方法。
例如:
class A {
public:
static int func(int i);
};
...
A* a = new A();
a->func(3);
...
有没有办法从编译器生成警告,以便我可以清理所有源代码,如下所示:
...
A::func(3);
...
因为我可以获得未使用和声明的变量的警告,我认为这些类型的坏成员使用应该有类似的东西,但没有运气:即使我在编译器选项中设置/Wall
我得到没有来自编译器的警告。
答案 0 :(得分:0)
编译器无需提供任何警告,因为对于static
成员方法func()
,以下两个调用都是有效的:
a->func(3); // calling as of it's a non-static member method
A::func(3); // calling as a proper `static` member method
但是,您明确指出A::func(3)
对于明确暗示func()
是static
成员的读者更具信息性是正确的。
“有没有办法从编译器生成警告......?”
不幸的是,没有办法检测不太优选的正确语法 但您可以执行否定编译:
private: static int func(int i); // make `func()` inaccessible outside `class A`
通过制作给定的static
方法private
来编译代码。这会在func()
被调用的任何禁止位置产生错误。现在您可以更正它并再次删除private:
说明符
这有点乏味,但确定的射击方式。
您也可以在IDE中使用“调用层次结构”功能,例如“Eclipse-CDT”,但很可能会遗漏template
或一些棘手的函数调用。