首页 > 解决方案 > 在 C++ 中显示“匿名”变量创建警告

问题描述

我有这样的课:

class ScopedLock {
public:
    ScopedLock (Locker *lock) { /*...*/ }
    ~ScopedLock () { /*...*/ }
};

通常它被称为(这将在正确的位置调用 ScopedLock 的构造函数/析构函数):

{
    ScopedLock l(&locker);
    // ...
}

我不小心这样称呼它:

{
    ScopedLock(&locker);
    // ...
}

这样的“东西”叫什么名字?未使用的匿名局部变量?

有没有可能阻止这种情况?是否有可用于此类“事物”的编译器警告?

标签: c++gcc

解决方案


您创建了一个未命名的临时/无名临时对象,ScopedLock该对象短暂存在,然后在;. 编译器不会发出警告,因为它假定您正在使用它做一些有用的事情。它不会进入 ctor 主体来检查是否是这种情况。例如,你想创建一个临时的,你的构造函数可能会做一些工作:

ScopedLock() {
    // do some work
}

您不能强制编译器针对此类用例显示警告,并且 GCC 中没有此类标志。

以下 SO 帖子可以证明是有益的:


推荐阅读