virtual void myFunc(int& a, int& b) {}
我得到有关未使用的变量警告,但我不想给它们做任何事情在基类。我想派生类来实现他们,如果他们想要的,什么都不做,如果他们不执行。我能做些什么来阻止不是把一个标志编译器等的警告?
根本不给他们一个名字:
virtual void myFunc( int&, int& );
既然你不想使用它们,你可以发出参数名称。
然而,而不是删除它们完全是有时更多有用的评论它们像这样:
virtual void myFunc(int& /* a */ , int& /* b */ )
{
}
这样你仍然可以看到该参数的目的是通过观察注释掉名。如果你把执行的头,因为它会是其中提到的参数名称的唯一的地方这是特别有用。
您有几种方式来无声此警告
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
[[maybe_unused]]
:
// In the class
virtual void myFunc([[maybe_unused]] int& a, [maybe_unused]] int& b) {}
尝试定义的函数无参数的名称为
virtual void myFunc(int& ,int& )
{
}
另外还要考虑让基类抽象的可能性
virtual void myFunc(int& a,int& b ) = 0;
如果它只是spesifies的接口。
在一些编译器,你可以简单地写变量名称为“无操作”语句。
virtual void myFunc(int& a, int& b)
{
a; // unused variable
b;
}
但是,为了支持其他编译器和使意图明确,你可以使用宏或函数unused_argument
讲清楚。
如果不与你的编译器的作品,我觉得这样做sizeof(a);
会的作品。
在Qt(5.x及以上,甚至更早),您可以访问位于Q_UNUSED
的qglobal.h
宏。这个宏执行的铸造到void
其参数,其结果存储无处 - 等无副作用其他使用可变的方式的MinGW / GCC会发现是可接受的。