我对自己犯的一个愚蠢的错误感到非常恼火。但是我什至对没有警告我的编译器(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
属性吗?
您的回答让我感到非常兴奋。
答案 0 :(得分:5)
不完全笼统。
该类中可能有mutable
个成员。授予编译器可以检查的内容。
const
方法可能会有其他副作用(例如,写入控制台),这将很难检测到函数实现是否在其他翻译单元中。