为什么 G++ 不警告 Const 成员的未使用结果?
Why Doesn't G++ Warn About Unused Result of Const Member?
我对我犯的一个愚蠢的错误感到非常恼火。但我什至对我的编译器 (g++ 8.1) 没有警告我感到恼火。 ;-)
请考虑以下代码:
class Test
{
public:
int getNumber() const
{
return 3;
}
};
int main(void)
{
Test test;
test.getNumber();
return 0;
}
我认为这条线
test.getNumber();
肯定是错的。调用了 Test
的常量成员,但未使用 return 值。尽管我一直在使用 -Wall -Wextra
进行编译,但 g++ 拒绝发出警告。我查看了 -Wunused-result
的文档。如果我给成员加上属性__attribute__ ((warn_unused_result))
,那么编译器确实会警告我
但为什么这是必要的?忽略 const 方法的 return 值总是错误的吗?我不应该为所有 const 成员自动设置 warn_unused_result
属性吗?
我对你的回答感到非常兴奋。
不完全笼统。
class 中可能有 mutable
个成员。授予编译器可以检查。
const
方法可能有其他副作用(例如写入控制台),如果函数实现在不同的翻译单元中,则很难检测到。
我对我犯的一个愚蠢的错误感到非常恼火。但我什至对我的编译器 (g++ 8.1) 没有警告我感到恼火。 ;-)
请考虑以下代码:
class Test
{
public:
int getNumber() const
{
return 3;
}
};
int main(void)
{
Test test;
test.getNumber();
return 0;
}
我认为这条线
test.getNumber();
肯定是错的。调用了 Test
的常量成员,但未使用 return 值。尽管我一直在使用 -Wall -Wextra
进行编译,但 g++ 拒绝发出警告。我查看了 -Wunused-result
的文档。如果我给成员加上属性__attribute__ ((warn_unused_result))
,那么编译器确实会警告我
但为什么这是必要的?忽略 const 方法的 return 值总是错误的吗?我不应该为所有 const 成员自动设置 warn_unused_result
属性吗?
我对你的回答感到非常兴奋。
不完全笼统。
class 中可能有
mutable
个成员。授予编译器可以检查。const
方法可能有其他副作用(例如写入控制台),如果函数实现在不同的翻译单元中,则很难检测到。