C++ Q_UNUSED比省略参数名有什么好处?

C++ Q_UNUSED比省略参数名有什么好处?,c++,qt,C++,Qt,与在函数中省略参数名相比,使用Q_UNUSED宏有什么好处 Q_未使用版本: void f(int x) { Q_UNUSED(x); } 省略版本: void f(int) { } 我认为有一些指导方针会告诉我为什么要使用它,但我没有发现任何关于它的东西。下一个想法是有一天省略在标准中不存在,但编译器不会在省略任何标准的变量名时抛出错误(98、03、11、14、17)。 那么,如果这个宏没有用,并且又多了一个地方写了一个错误,为什么Qt会使用它呢?Q\U UNUSED可以防止编译器

与在函数中省略参数名相比,使用
Q_UNUSED
宏有什么好处

Q_未使用
版本:

void f(int x) {
    Q_UNUSED(x);
}
省略版本:

void f(int) {
}
我认为有一些指导方针会告诉我为什么要使用它,但我没有发现任何关于它的东西。下一个想法是有一天省略在标准中不存在,但编译器不会在省略任何标准的变量名时抛出错误(98、03、11、14、17)。
那么,如果这个宏没有用,并且又多了一个地方写了一个错误,为什么Qt会使用它呢?

Q\U 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(lock) // shut up, compiler
}
理论上(可能经常)我们也会遇到类似的情况,当我们最初使用堆栈上的对象编写代码时,不一定是互斥锁锁,然后在我们确定最终使用它之前,决定通过参数将引用传递给它。我个人不喜欢重温代码中这些无关紧要的“时刻”来修正一些警告。因此,当代码未完成时,我使用Q_UNUSED right和left


当然,编译器发出“unused variable”警告的事实取决于编译器的选项。

向任何阅读您的代码的人(包括您自己)显示意图,而不是潜在的打字错误。也回答了“刚才那个参数是什么”,通过把名字放在代码中。@ RICHARDCRITTEN INLINE注释也会显示意图:<代码>空洞F(INT/*X*/){/COD>。是的,只是认为这是“基于意见的”,因此应该关闭。考虑<代码>空隙F(int x){aScript(x>0);qyunUn利用(x);},在这种情况下,
x
在调试模式下使用,但在发布模式下未使用。@RichardCriten我不同意,答案似乎是基于观点的,但问题是合理的,因为它询问是否有实际的好处/区别,以便我们可以回答没有。在这种情况下,编译器不会(AFAIK)发出警告。如果析构函数中有副作用,将使用该对象。请尝试。我的GCC有。:)它以“unused variable”结尾。我无法始终控制大项目中的编译器选项。