j5w*_*j5w 7 c++ c++17 nodiscard
该[[nodiscard]]属性对于操作员来说是必需的吗?或者可以安全地假设编译器会发出警告,就像它对大多数可疑丢弃的东西所做的那样?
例如,一个重载的operator+,应该应用该属性吗?函数转换运算符或新运算符等特殊运算符又如何呢?什么时候迂腐了?
让我引用 N.Josuttis 的以下论文:“[[nodiscard]]在图书馆中”(有一些遗漏,请参阅全文):
\n\nC++17 引入了该
\n[[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
| 归档时间: |
|
| 查看次数: |
3691 次 |
| 最近记录: |