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

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

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

请考虑以下代码:

class Test
{
public:

    int getNumber() const
    {
        return 3;
    }
};

int main(void)
{
    Test test;
    test.getNumber();

    return 0;
}

我认为这条线

test.getNumber();

肯定是错的。调用了 Test 的常量成员,但未使用 return 值。尽管我一直在使用 -Wall -Wextra 进行编译,但 g++ 拒绝发出警告。我查看了 -Wunused-result 的文档。如果我给成员加上属性__attribute__ ((warn_unused_result)),那么编译器确实会警告我

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

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

不完全笼统。

  1. class 中可能有 mutable 个成员。授予编译器可以检查。

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