c ++虚函数,参数在未使用时获取警告

gda*_*004 10 c++ warnings compiler-warnings suppress-warnings

virtual void myFunc(int& a, int& b) {}
Run Code Online (Sandbox Code Playgroud)

我收到有关未使用变量的警告,但我不想在基类中对它们做任何事情.我希望派生类在需要时实现它们,如果它们不实现它们则不执行任何操作.除了在编译器上放置标志之外,我该怎么做才能停止警告?

jro*_*rok 26

只是不要给他们一个名字:

virtual void myFunc( int&, int& );
Run Code Online (Sandbox Code Playgroud)

  • 但是通常,您希望保留名称以用于文档记录和供IntelliSense之类的IDE功能使用。所以我更喜欢其他选择。 (2认同)

Sea*_*ean 9

由于您不想使用它们,因此可以发出参数名称.

但是,不是完全删除它们,有时候将它们评论出来更有用:

virtual void myFunc(int& /* a */ , int& /* b */ ) 
{
}
Run Code Online (Sandbox Code Playgroud)

这样,通过查看注释掉的名称,您仍然可以看到参数的意图.如果将实现放在标题中,这将是唯一提及参数名称的地方,这一点特别有用.


Jar*_*d42 8

你有几种方法来沉默这个警告

  • 从声明/定义中删除它们:

    virtual void myFunc(int& /* a */ , int& /* b */ ) {}
    
    Run Code Online (Sandbox Code Playgroud)

    这个解决方案可能会引发一些警告,如Doxygen ...

  • 使用技巧告诉参数未使用:

    template <typename T> void unusedArg(const T&) {} // Helper function.
    
    // In the class
    virtual void myFunc(int& a, int& b) { unusedArg(a); unusedArg(b); }
    
    Run Code Online (Sandbox Code Playgroud)

    或者在C++ 11中:

    template <typename ... Ts> void unusedArgs(const Ts...&) {} // Helper function.
    
    // In the class
    virtual void myFunc(int& a, int& b) { unusedArgs(a, b); } // C++11
    
    Run Code Online (Sandbox Code Playgroud)
  • 在C++ 17中,您还可以使用属性[[maybe_unused]]:

    // In the class
    virtual void myFunc([[maybe_unused]] int& a, [maybe_unused]] int& b) {}
    
    Run Code Online (Sandbox Code Playgroud)