我有一个叫做MutexLock的类,听起来很像:它在构造时锁定互斥量,并在破坏时释放它:

    class OpenEXRMutexLock
    {
#ifndef HAVE_PTHREADS
    public:
        OpenEXRMutexLock() : lock(openEXRmutex) { }
    private:
        std::unique_lock<std::mutex> lock;
#endif
    };

定义HAVE_PTHREADS时,我每次执行gcc 4.9.1都会抱怨未使用的变量:
OpenEXRMutexLock lock;

当然,该类永远不得在外部构造和自动销毁中使用。

目前,我做了一些丑陋的事情:我添加了
void OpenEXRMutexLock::dummyFuncAvoidingWarnings() const {}

并随处调用:
OpenEXRMutexLock lock;
lock.dummyFuncAvoidingWarnings(); //Eeerk

有没有办法避免在整个项目上禁用未使用的变量警告而避免此

最佳答案

GCC非常聪明,可以检测变量的定义是否调用构造函数调用。在您的情况下,确保确实调用了构造函数(即使是空的构造函数)也会将变量定义标记为具有副作用,并确保您不再收到警告。

This behavior holds true even for ancient versions of GCC.

07-27 18:18