c++ - 为什么 G++ 不警告 Const 成员的未使用结果?
问题描述
我对自己犯的一个愚蠢的错误感到非常恼火。但是我什至对没有警告我的编译器(g++ 8.1)感到更恼火。;-)
请考虑以下代码:
class Test
{
public:
int getNumber() const
{
return 3;
}
};
int main(void)
{
Test test;
test.getNumber();
return 0;
}
在我看来,这条线
test.getNumber();
肯定是错的。调用了 const 成员Test
,但不使用返回值。即使我一直在用-Wall -Wextra
g++ 编译,也拒绝发出警告。我检查了-Wunused-result
. 如果我将属性添加__attribute__ ((warn_unused_result))
到成员,那么编译器确实会警告我。
但为什么这是必要的?忽略 const 方法的返回值不是总是错误的吗?我不应该有可能warn_unused_result
为所有 const 成员自动设置属性吗?
我对你的回答感到非常兴奋。
解决方案
不,不完全一般。
班里可能有
mutable
成员。授予编译器可以检查的。该
const
方法可能有其他副作用(例如写入控制台),如果函数实现在不同的翻译单元中,这将很难检测到。
推荐阅读
- python-3.x - 在 plotly 中可视化图形节点的时间序列数据
- react-native - react-native 发布 apk 在警报框中给出错误 {"line":132,"column":7285,"sourceURL":"index.android.bundle"}
- javascript - Sending data from Python to Javascript using EEL
- sql-server - Powershell SQL 集群资源检查
- r - R Plotly - 设置高度时图表顶部和底部的大量未使用空间
- algorithm - 有更多或更少的搜索关键字更好吗?
- android - 我想将所有子值放入另一个单独的节点值?
- dynamic - 如何处理 Cassandra 中的动态列
- java - 需要用Java序列化这个复杂的HashMap
- audio-recording - Windows 10 更新后立体声混音不再工作