【发布时间】:2021-07-07 14:56:56
【问题描述】:
我有一个 C++ 项目,其中clang-tidy 建议在任何地方添加[[nodiscard]]。这是一个好习惯吗?我的理解是 [[nodiscard]] 只有在忽略返回值对程序可能是致命的情况下才应该使用。我有一个对象Car,它有一个成员const unsigned int m_ID。吸气剂 unsigned int getID() 应该有 [[nodiscard]] 吗? clang-tidy 建议这样做。
编辑:
当然,我不想忽略 getter。但是
我的观点是,如果每个返回内容的函数都应该有一个[[nodiscard]],那么属性[[nodiscard]] 无论如何都是多余的。编译器可以简单地检查所有返回值的函数。
【问题讨论】:
-
为什么要忽略 getter 函数返回的值?
-
是的,它应该有
[[nodiscard]],因为丢弃 getter 的返回值没有任何意义,如果这样做可能是一个错误。 -
我认为这条规则没有意义,
[[nodiscard]]应该只用于那些实际上不应该被丢弃的东西。 (否则它实际上没有任何意义,因为所有功能都有它) -
[[nodiscard]]的目的不仅是为了防止您忘记处理返回值(因为它在某种程度上很重要),而且如果您编写愚蠢的代码也会对您大喊大叫。为什么你会忽略 getter 的返回值? -
这不仅是因为忽略返回值将是“致命的”。这是因为忽略返回值没有任何意义并且可能是一个错误。如果一个方法或函数的唯一影响是它的返回值,那么唯一明智的选择是获取返回值或根本不调用该函数。
标签: c++ clang clang-tidy nodiscard