说我有
[[nodiscard]] int foo ()
{
return 0;
}
int main ()
{
foo ();
}
然后
error: ignoring return value of ‘int foo()’, declared with attribute nodiscard [-Werror=unused-result]
但是如果
int x = foo ();
然后
error: unused variable ‘x’ [-Werror=unused-variable]
是否有一种干净的方法告诉编译器“我想放弃此
[[nodiscard]]
值”? 最佳答案
WG14 nodiscard proposal讨论了通过强制转换为无效来使诊断静音的原理。它说强制转换为void是鼓励(如果不是非规范的)将其静音的方法,该方法遵循现有实现对__attribute__((warn_unused_result))
的操作:
C++方式为static_cast<void>
。
参见C++标准草案[[dcl.attr.nodiscard]p2:
这是一个说明,因此不是规范性的,但基本上这是现有实现对__attribute__((warn_unused_result))
所做的工作。另外,请注意,nodiscard的诊断也是非规范的,因此,违反nodiscard的诊断不是错误的形式,而是实现质量,就像通过强制转换为空来抑制一样。
参见clang document on nodiscard, warn_unused_result:
关于c++ - 如何有意丢弃[[nodiscard]]返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53581744/