C ++虚函数的参数得到警告,当未使用

问题描述 投票:6回答:6
virtual void myFunc(int& a, int& b) {}

我得到有关未使用的变量警告,但我不想给它们做任何事情在基类。我想派生类来实现他们,如果他们想要的,什么都不做,如果他们不执行。我能做些什么来阻止不是把一个标志编译器等的警告?

c++ warnings compiler-warnings suppress-warnings
6个回答
26
投票

根本不给他们一个名字:

virtual void myFunc( int&, int& );

9
投票

既然你不想使用它们,你可以发出参数名称。

然而,而不是删除它们完全是有时更多有用的评论它们像这样:

virtual void myFunc(int& /* a */ , int& /* b */ ) 
{
}

这样你仍然可以看到该参数的目的是通过观察注释掉名。如果你把执行的头,因为它会是其中提到的参数名称的唯一的地方这是特别有用。


8
投票

您有几种方式来无声此警告

  • 从声明/定义中删除它们: 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) {}

4
投票

尝试定义的函数无参数的名称为

virtual void myFunc(int& ,int&  ) 
{

}

另外还要考虑让基类抽象的可能性

virtual void myFunc(int& a,int& b ) = 0;

如果它只是spesifies的接口。


0
投票

在一些编译器,你可以简单地写变量名称为“无操作”语句。

virtual void myFunc(int& a, int& b) 
{
    a;    // unused variable
    b;
}

但是,为了支持其他编译器和使意图明确,你可以使用宏或函数unused_argument讲清楚。

如果不与你的编译器的作品,我觉得这样做sizeof(a);会的作品。


0
投票

在Qt(5.x及以上,甚至更早),您可以访问位于Q_UNUSEDqglobal.h宏。这个宏执行的铸造到void其参数,其结果存储无处 - 等无副作用其他使用可变的方式的MinGW / GCC会发现是可接受的。

© www.soinside.com 2019 - 2024. All rights reserved.