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)
由于您不想使用它们,因此可以发出参数名称.
但是,不是完全删除它们,有时候将它们评论出来更有用:
virtual void myFunc(int& /* a */ , int& /* b */ )
{
}
Run Code Online (Sandbox Code Playgroud)
这样,通过查看注释掉的名称,您仍然可以看到参数的意图.如果将实现放在标题中,这将是唯一提及参数名称的地方,这一点特别有用.
你有几种方法来沉默这个警告
从声明/定义中删除它们:
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)