virtual void myFunc(int& a, int& b) {}
我收到有关未使用变量的警告但我不想在基类中对它们做任何事情。 我希望派生类在需要时实现它们,如果它们不实现它们则不执行任何操作。除了在编译器上放置标志之外,我该怎么做才能停止警告?
答案 0 :(得分:25)
根本不要给他们起个名字:
virtual void myFunc( int&, int& );
答案 1 :(得分:9)
由于您不想使用它们,您可以发出参数名称。
然而,不是完全删除它们,有时候将它们评论出来更有用:
virtual void myFunc(int& /* a */ , int& /* b */ )
{
}
通过查看注释掉的名称,您仍然可以看到参数的意图。如果将实现放在标题中,这将是唯一提及参数名称的地方,这一点特别有用。
答案 2 :(得分:7)
您有几种方法来沉默此警告
从声明/定义中删除它们:
virtual void myFunc(int& /* a */ , int& /* b */ ) {}
这个解决方案可能会引发一些警告,如Doxygen ......
使用技巧告诉参数未使用:
template <typename T> void unusedArg(const T&) {} // Helper function.
// In the class
virtual void myFunc(int& a, int& b) { unusedArg(a); unusedArg(b); }
或在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
在C ++ 17中,您还可以使用属性[[maybe_unused]]
:
// In the class
virtual void myFunc([[maybe_unused]] int& a, [maybe_unused]] int& b) {}
答案 3 :(得分:4)
尝试将没有参数名称的函数定义为
virtual void myFunc(int& ,int& )
{
}
还要考虑使基类抽象的可能性
virtual void myFunc(int& a,int& b ) = 0;
如果它只是简化界面。
答案 4 :(得分:0)
在某些编译器中,您只需将变量名称写为“no-op”语句。
virtual void myFunc(int& a, int& b)
{
a; // unused variable
b;
}
但是,为了支持其他编译器并使目标明确,您可以使用宏或函数unused_argument
来明确它。
如果这对你的编译器不起作用,我认为做sizeof(a);
会有效。
答案 5 :(得分:0)
在Qt(5.x及更高版本,甚至更早)中,您可以访问位于Q_UNUSED
中的qglobal.h
宏。该宏对其参数执行void
的强制转换,结果没有存储在任何地方-因此,使用MinGW / GCC可以接受的方式使用该变量不会产生其他副作用。