问题标签 [nodiscard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
252 浏览

c++ - [[nodiscard]] 在 std::function 返回类型定义中?

我想知道是否有办法拥有这样的东西:

(我知道上面的代码不会被编译并抱怨nodiscard不能应用于类型!)

我的目标是强制回调的调用者检查它的返回值!

0 投票
2 回答
125 浏览

c++ - 使用static_cast对吗忽略迭代器作为返回值?

我必须处理来自的 [[nodiscard]] 警告std::remove

我想要正确的方法来做到这一点。可以通过以下代码停止警告:

我不想使用std::remove.

输出:

这是一个对 SO 上已经搜索过的问题不感兴趣的特定问题。

更新:数据一致且可读的格式。

0 投票
1 回答
146 浏览

c++ - [[nodiscard]] 用于常量 getter 函数

[[nodiscard]]Clang-Tidy 抱怨缺少没有参数的常量成员函数是否有充分的理由?如果返回值被丢弃,编译器不能自己解决这个问题并发出警告吗?

在我看来,这对于人类读者来说是多余的信息。

0 投票
0 回答
129 浏览

c++ - 从 [[nodiscard]] 中排除函数的返回值

我想将一个类标记为 nodiscard,但从 nodiscard 要求中排除某个函数的返回值。这是我的目标:

我不认为在每个呼叫站点添加 ok-to-discard 是一个好主意( 我如何故意丢弃 [[nodiscard]] 返回值?):

  • 有许多呼叫站点。避免到处添加 ok-to-discard 会很好。
  • 说不定哪天我换个功能,丢了就不行了。最好将 ok-to-discard 指令与函数一起保留,以便在发生这种情况时将其删除(并获得编译器警告/错误)。
0 投票
2 回答
2108 浏览

c++ - 为什么 clang-tidy 建议在任何地方添加 [[nodiscard]] ?

我有一个 C++ 项目,clang-tidy建议[[nodiscard]]到处添加。这是一个好习惯吗?我的理解是,[[nodiscard]]只有在忽略返回值对程序可能是致命的情况下才应该使用它。我有一个对象Car,它有一个成员const unsigned int m_ID。吸气剂应该unsigned int getID()[[nodiscard]]吗?clang-tidy 建议如此。

编辑:

当然,我不想忽略 getter。但是
我的观点是,如果每个返回某些东西的函数都应该有一个[[nodiscard]],那么该属性[[nodiscard]]无论如何都是多余的。编译器可以简单地检查所有返回值的函数。

0 投票
1 回答
716 浏览

c++ - 警告 C5240:“nodiscard”:在此句法位置忽略属性

最近发布了 Visual Studio 2019 的 16.9.5 版本。它显然引入了新警告:

其实我以为 nodiscard 和 dllexport 都是可以按任意顺序出现的属性,还是不是?

0 投票
1 回答
107 浏览

c++ - 将 nodiscard 属性添加到第三方标头中的函数

我正在使用一个我无法编辑且不想分叉的库,它有一堆 int 错误返回样式的函数:

int libnamespace_dosomething(int, sometype*);

我希望该库具有[[nodiscard]]__attribute__((warn_unused_result))在大多数(可能是所有)接口上,以便当我无法检查调用是否成功时编译器会发出声音。

关于如何实现这一目标的任何建议?

目前的想法是相当劳动密集型的:

  • 编辑标题,修复错误,将标题放回原处。偶尔重复
  • 基于宏的丑陋的东西,也许能够从nm | bash
  • 铿锵插件

编辑:我正在考虑的包装方法是

0 投票
1 回答
212 浏览

c++ - 为什么不将 [[nodiscard]] 应用于每个构造函数?

从 C++20 开始,[[nodiscard]]可以应用于构造函数。http://wg21.link/p1771有例子:

通常构造函数没有副作用。所以丢弃结果是没有意义的。例如,std::vector如下丢弃是没有意义的:

如果std::vectorconstructor is会很有用[[nodiscard]],这样上面的代码就会产生警告。

具有副作用的显着构造函数unique_lock锁构造函数,例如or lock_guard。但是这些也是很好的标记目标[[nodiscard]],以避免错过范围,如下所示:

如果std::lock_guardconstructor is会很有用[[nodiscard]],这样上面的代码就会产生警告。

当然有这样的情况return std::lock_guard{Mutex}, InterThreadVariable;。但是很少有[[nodiscard]]守卫,并且像当地一样压制他们return ((void)std::lock_guard{Mutex}, InterThreadVariable);

那么,在任何情况下构造函数不应该nodiscard?