为什么 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
的 const 成员,但不使用返回值。即使我一直在用-Wall -Wextra
g++进行编译,也拒绝发出警告。我已经检查了-Wunused-result
的文件。如果我将属性__attribute__ ((warn_unused_result))
添加到成员中,那么编译器确实会警告我。
但为什么这是必要的呢?忽略 const 方法的返回值并不总是错误的吗?我不应该为所有 const 成员自动设置 warn_unused_result
属性吗?
我对你的回答感到非常兴奋。
不,不是完全笼统的。
-
类中可能有
mutable
个成员。如果编译器可以检查这一点。 -
const
方法可能会有其他副作用(例如写入控制台),如果函数实现位于不同的转换单元中,则很难检测到。
相关文章:
- 普通环路未使用gcc 4.8.5自动矢量化
- 在更改for循环的第三部分后,未使用for循环结果
- 使用typeid警告未使用的变量
- C++删除未使用的类属性会导致 std::logic_error
- 警告 C4552:">>":未使用表达式的结果
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 为什么我会收到警告,指出函数已使用但未定义,以及已定义但未使用?
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 可视化C++载体:未使用的容量
- GCC 中 __attribute__((未使用)) 和 __attribute((未使用)) 之间的区别
- 循环访问还包含未使用元素的字符串数组
- 使用 std ::transform 构造 std::vector.返回未命名结果的可能性?
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 为什么 G++ 不警告 const 成员的未使用结果?
- 不等式比较结果 移至 C++11 时未使用的警告
- 表达式结果未使用,图像生成
- 取消引用无效指针但不使用结果是否是C++中的未定义行为
- 警告:表达式结果未使用
- 在C++11中,未排序的修改警告变为结果未使用的警告
- C++内存:删除未使用的布尔数组可以将结果从正确更改为错误