Q_UNUSED优于省略参数名称有什么好处?

时间:2017-12-19 15:42:16

标签: c++ qt

使用Q_UNUSED宏而不是在函数中省略参数名称有什么好处?

Q_UNUSED版本:

void f(int x) {
    Q_UNUSED(x);
}

省略版本:

void f(int) {
}

我认为有些指导方针可以使用它,但是我没有找到任何关于它的信息there。接下来的想法是,有一天在标准中不存在省略,但编译器不会因为省略任何标准的变量名而抛出错误(98,03,11,14,17)。 那么,为什么Qt使用这个宏,如果它没用,再多做一个写错的地方呢?

1 个答案:

答案 0 :(得分:2)

Q_UNUSED可以防止编译器在多个未处理的参数情况下反应过度。此外,我们可以实例化一个对象,而不需要单独调用它:

MyClass myObject;
Q_UNUSED(myObject)

最常见的情况是QMutexLocker:

void qtFunc()
{
   // and no other line of code in that function accesses `lock`
   QMutexLocker lock(&m_mutex);
   // it just protects this scope with some object shared with other threads
   Q_UNUSED(myObject) // shut up, compiler
}

理论上(可能经常)我们可以有类似的情况,当我们最初用堆栈上的对象编写代码然后决定通过它传递引用时,不一定是互斥锁在我们弄清楚它的最终用途之前的参数。我个人不想再次访问这些微不足道的时刻"在代码中修复一些警告。因此,当代码未完成时,我左右使用Q_UNUSED。

P.S。当然,编译器发出" unused-variable"警告取决于编译器的选项。