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

Ben*_*ler 1 c++ g++ compiler-warnings

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

请考虑以下代码:

class Test
{
public:

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

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我看来这条线

test.getNumber();
Run Code Online (Sandbox Code Playgroud)

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

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

我对你的答案非常兴奋.

Bat*_*eba 5

不完全普遍.

  1. mutable班上可能有成员.当然编译器可以检查一下.

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

  • 也相关:[`[[nodiscard]]`](https://en.cppreference.com/w/cpp/language/attributes/nodiscard). (4认同)