使用Q_UNUSED
宏而不是在函数中省略参数名称有什么好处?
Q_UNUSED
版本:
void f(int x) {
Q_UNUSED(x);
}
省略版本:
void f(int) {
}
我认为有些指导方针可以使用它,但是我没有找到任何关于它的信息there。接下来的想法是,有一天在标准中不存在省略,但编译器不会因为省略任何标准的变量名而抛出错误(98,03,11,14,17)。 那么,为什么Qt使用这个宏,如果它没用,再多做一个写错的地方呢?
答案 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"警告取决于编译器的选项。