为什么 G++ 不警告 const 成员的未使用结果?

Why Doesn't G++ Warn About Unused Result of Const Member?

本文关键字:未使用 结果 成员 const G++ 警告 为什么      更新时间:2023-10-16

我对自己犯的一个愚蠢的错误感到非常恼火。但我更恼火的是我的编译器(g ++ 8.1),它没有警告我。;-)

请考虑以下代码:

class Test
{
public:
    int getNumber() const
    {
        return 3;
    }
};
int main(void)
{
    Test test;
    test.getNumber();
    return 0;
}

在我看来,这条线

test.getNumber();

绝对是错的。调用 Test 的 const 成员,但不使用返回值。即使我一直在用-Wall -Wextra g++进行编译,也拒绝发出警告。我已经检查了-Wunused-result的文件。如果我将属性__attribute__ ((warn_unused_result))添加到成员中,那么编译器确实会警告我。

但为什么这是必要的呢?忽略 const 方法的返回值并不总是错误的吗?我不应该为所有 const 成员自动设置 warn_unused_result 属性吗?

我对你的回答感到非常兴奋。

不,不是完全笼统的。

  1. 类中可能有 mutable 个成员。如果编译器可以检查这一点。

  2. const 方法可能会有其他副作用(例如写入控制台),如果函数实现位于不同的转换单元中,则很难检测到。