对坏的静态函数使用生成编译器警告

时间:2016-09-13 09:18:31

标签: c++ visual-studio-2013 static-methods

我正在对VS C ++项目进行一些维护,我经常看到静态成员函数被用作类方法。

例如:

class A {
public:
    static int func(int i);
};

...
A* a = new A();
a->func(3);
...

有没有办法从编译器生成警告,以便我可以清理所有源代码,如下所示:

...
A::func(3);
...

因为我可以获得未使用和声明的变量的警告,我认为这些类型的坏成员使用应该有类似的东西,但没有运气:即使我在编译器选项中设置/Wall我得到没有来自编译器的警告。

1 个答案:

答案 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或一些棘手的函数调用。