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成员自动设置属性吗?
我对你的答案非常兴奋.
不完全普遍.
mutable班上可能有成员.当然编译器可以检查一下.
该const方法可能具有其他副作用(例如写入控制台),如果函数实现位于不同的转换单元中,则很难检测到.