请考虑以下代码:
class cls
{
};
__attribute__((warn_unused_result))
cls fn1()
{
return cls();
}
__attribute__ ((warn_unused_result))
int fn2()
{
return 1;
}
int main()
{
auto x = fn1();
(void)x;
auto y = fn2();
(void)y;
return 0;
}
当我用-Wall -Wextra
和gcc 5.4.0编译时,我得到 a 警告:
warning: ignoring return value of ‘cls fn1()’,
declared with attribute warn_unused_result [-Wunused-result]
有人可以告诉我什么是错的吗?
尽管有fn1
变量,为什么x
会显示此警告,为什么fn2
没有显示此警告?
更新1 :在一点帮助下,我尝试使用g ++ 4.8.3 - 结果相同。更多 - g ++ 3.3.6产生两个警告 - 适用于fn1
和fn2
。
什么"修复"警告是......猜猜是什么 - 在类中添加数据成员或虚拟成员函数(非虚函数无效)。对我来说听起来像编译器错误。
更新2 :实际上添加成员或虚拟功能会完全禁用警告,因此只需调用fn1();
就不会再产生警告。