modernize-use-nodiscard

为成员函数添加 [[nodiscard]] 属性(在 C++17 中引入),以便在编译时突出显示哪些返回值不应该被忽略。

该检查将考虑满足以下条件的成员函数:

  • 没有 [[nodiscard]][[noreturn]]__attribute__((warn_unused_result))[[clang::warn_unused_result]] 以及 [[gcc::warn_unused_result]] 属性,

  • 非 void 返回类型,

  • 非模板返回类型,

  • const 成员函数,

  • 非可变参数函数,

  • 没有非 const 引用参数,

  • 没有指针参数,

  • 没有模板参数,

  • 没有模板函数参数,

  • 不是具有可变成员变量的类的成员,

  • 没有 Lambda 表达式,

  • 没有转换函数。

此类函数没有改变任何状态或传递除返回类型之外的值的方法。除非成员函数通过某些外部调用(例如 I/O)来改变状态。

示例

bool empty() const;
bool empty(int i) const;

转换为

[[nodiscard]] bool empty() const;
[[nodiscard]] bool empty(int i) const;

选项

ReplacementString

指定一个宏来代替 [[nodiscard]]。这在维护需要使用预 C++17 编译器编译的源代码时很有用。

示例

bool empty() const;
bool empty(int i) const;

转换为

NO_DISCARD bool empty() const;
NO_DISCARD bool empty(int i) const;

如果 ReplacementString 选项设置为 NO_DISCARD

注意

如果 ReplacementString 不是 C++ 属性,而是宏,那么该宏必须在作用域中定义,否则修复将不会应用。

注意

有关在非 C++17 源代码中将函数标记为 [[nodiscard]] 的其他 __attribute__ 语法选项。请参阅 https://clang.llvm.net.cn/docs/AttributeReference.html#nodiscard-warn-unused-result