问题标签 [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.
c++ - [[nodiscard]] 在 std::function 返回类型定义中?
我想知道是否有办法拥有这样的东西:
(我知道上面的代码不会被编译并抱怨nodiscard
不能应用于类型!)
我的目标是强制回调的调用者检查它的返回值!
c++ - 使用static_cast对吗忽略迭代器作为返回值?
我必须处理来自的 [[nodiscard]] 警告std::remove
;
我想要正确的方法来做到这一点。可以通过以下代码停止警告:
我不想使用std::remove
.
输出:
这是一个对 SO 上已经搜索过的问题不感兴趣的特定问题。
更新:数据一致且可读的格式。
c++ - [[nodiscard]] 用于常量 getter 函数
[[nodiscard]]
Clang-Tidy 抱怨缺少没有参数的常量成员函数是否有充分的理由?如果返回值被丢弃,编译器不能自己解决这个问题并发出警告吗?
在我看来,这对于人类读者来说是多余的信息。
c++ - 从 [[nodiscard]] 中排除函数的返回值
我想将一个类标记为 nodiscard,但从 nodiscard 要求中排除某个函数的返回值。这是我的目标:
我不认为在每个呼叫站点添加 ok-to-discard 是一个好主意( 我如何故意丢弃 [[nodiscard]] 返回值?):
- 有许多呼叫站点。避免到处添加 ok-to-discard 会很好。
- 说不定哪天我换个功能,丢了就不行了。最好将 ok-to-discard 指令与函数一起保留,以便在发生这种情况时将其删除(并获得编译器警告/错误)。
c++ - 为什么 clang-tidy 建议在任何地方添加 [[nodiscard]] ?
我有一个 C++ 项目,clang-tidy
建议[[nodiscard]]
到处添加。这是一个好习惯吗?我的理解是,[[nodiscard]]
只有在忽略返回值对程序可能是致命的情况下才应该使用它。我有一个对象Car
,它有一个成员const unsigned int m_ID
。吸气剂应该unsigned int getID()
有[[nodiscard]]
吗?clang-tidy
建议如此。
编辑:
当然,我不想忽略 getter。但是
我的观点是,如果每个返回某些东西的函数都应该有一个[[nodiscard]]
,那么该属性[[nodiscard]]
无论如何都是多余的。编译器可以简单地检查所有返回值的函数。
c++ - 警告 C5240:“nodiscard”:在此句法位置忽略属性
最近发布了 Visual Studio 2019 的 16.9.5 版本。它显然引入了新警告:
其实我以为 nodiscard 和 dllexport 都是可以按任意顺序出现的属性,还是不是?
c++ - 将 nodiscard 属性添加到第三方标头中的函数
我正在使用一个我无法编辑且不想分叉的库,它有一堆 int 错误返回样式的函数:
int libnamespace_dosomething(int, sometype*);
我希望该库具有[[nodiscard]]
或__attribute__((warn_unused_result))
在大多数(可能是所有)接口上,以便当我无法检查调用是否成功时编译器会发出声音。
关于如何实现这一目标的任何建议?
目前的想法是相当劳动密集型的:
- 编辑标题,修复错误,将标题放回原处。偶尔重复
- 基于宏的丑陋的东西,也许能够从
nm | bash
- 铿锵插件
编辑:我正在考虑的包装方法是
c++ - 为什么不将 [[nodiscard]] 应用于每个构造函数?
从 C++20 开始,[[nodiscard]]
可以应用于构造函数。http://wg21.link/p1771有例子:
通常构造函数没有副作用。所以丢弃结果是没有意义的。例如,std::vector
如下丢弃是没有意义的:
如果std::vector
constructor is会很有用[[nodiscard]]
,这样上面的代码就会产生警告。
具有副作用的显着构造函数是unique_lock
锁构造函数,例如or lock_guard
。但是这些也是很好的标记目标[[nodiscard]]
,以避免错过范围,如下所示:
如果std::lock_guard
constructor is会很有用[[nodiscard]]
,这样上面的代码就会产生警告。
当然有这样的情况return std::lock_guard{Mutex}, InterThreadVariable;
。但是很少有[[nodiscard]]
守卫,并且像当地一样压制他们return ((void)std::lock_guard{Mutex}, InterThreadVariable);
那么,在任何情况下构造函数不应该被nodiscard?