首页 > 解决方案 > 为什么 G++ 不警告 Const 成员的未使用结果?

问题描述

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

请考虑以下代码:

class Test
{
public:

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

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

    return 0;
}

在我看来,这条线

test.getNumber();

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

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

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

标签: c++g++compiler-warnings

解决方案


不,不完全一般。

  1. 班里可能有mutable成员。授予编译器可以检查的。

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


推荐阅读