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

时间:2019-01-18 12:54:57

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

我对自己犯的一个愚蠢的错误感到非常恼火。但是我什至对没有警告我的编译器(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 个答案:

答案 0 :(得分:5)

不完全笼统。

  1. 该类中可能有mutable个成员。授予编译器可以检查的内容。

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