运营商是否需要nodiscard?

j5w*_*j5w 7 c++ c++17 nodiscard

该[[nodiscard]]属性对于操作员来说是必需的吗?或者可以安全地假设编译器会发出警告,就像它对大多数可疑丢弃的东西所做的那样?

例如,一个重载的operator+,应该应用该属性吗?函数转换运算符或新运算符等特殊运算符又如何呢?什么时候迂腐了?

Evg*_*Evg 8

让我引用 N.Josuttis 的以下论文:“[[nodiscard]]在图书馆中”(有一些遗漏,请参阅全文):

\n
\n

C++17 引入了该[[nodiscard]]属性。问题是,现在在标准库中应用它在哪里。应在以下位置添加:

\n
    \n
  • 不总是使用返回值是一个\xe2\x80\x9chuge错误\xe2\x80\x9d(例如总是导致资源泄漏),
  • \n
  • 不使用返回值是麻烦的根源,而且很容易发生(不明显表明有问题)。
  • \n
\n

以下情况不应添加:

\n
    \n
  • 至少对于某些输入来说,不使用返回值是一种可能/常见的编程方式,
  • \n
  • 不使用返回值没有任何意义,但不会造成伤害,并且通常不是错误。
  • \n
\n

因此,[[nodiscard]]如果出现这种情况,不应发出错误代码的信号

\n
    \n
  • 不使用返回值可能很有用,
  • \n
  • 通常不使用返回值,
  • \n
  • 不会伤害 xe2x80x99,并且可能没有状态更改意味着不会发生 xe2x80x99。
  • \n
\n
\n

  • 很好的参考。我正在搜索核心指南,但它仅在强制转换的上下文中提到(以消除警告) (2认同)