问题标签 [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 回答
2605 浏览

c++ - 为什么 C++20 中的 std::move 不是 [[nodiscard]]?

我最近[[nodiscard]]在 C++17 中读到过,据我了解,这是一个新功能(按合同设计?),它迫使您使用返回值。这对于像 (nodiscard since C++20) 这样的有争议的函数是有意义的std::launder,但我想知道为什么std::move在 C++17/20 中没有这样定义。你知道一个很好的理由还是因为 C++20 还没有最终确定?

0 投票
2 回答
473 浏览

c++ - 模板参数依赖 [[nodiscard]]

我有一个函数对象,它是另一个函数的包装器:

我想做的是将 标记operator()[[nodiscard]]好像std::result_of<FuncT(ARG&&...)>::type不是void

我注意到的是,当我将[[nodiscard]]返回类型的模板评估的情况下放入 时void,它只会被我的编译器忽略。

这是我可以依赖的行为吗,它是否以任何方式标准化?

0 投票
1 回答
263 浏览

c++ - 问:如何在 C++17 中定义一个不可丢弃的布尔值,最好使用枚举?

C++17 支持[[nondiscard]]函数类(结构)和枚举的属性。

以下定义编译(g ++ 7.4.0)而不产生“警告:'nondiscard'属性指令被忽略” - 所以我假设该[nondiscard]]属性没有被忽略。

enum {False=false, True=true} [[nondiscard]] ;

但是,当丢弃 False 或 True 值时,它不会产生警告(这是这里的目标)。

==== 编辑 ====

该问题的更多上下文以及:如何制作 nodiscard MACRO(用于类或枚举值)。

我发布的原始问题存在三个问题:

  1. 多么尴尬 - 我写了 [[nondiscard]] io [[nodiscard]]
  2. 当属性中存在拼写错误时,编译器通常会发出警告(属性被忽略),但在这种情况下不会发出警告。
  3. 将其更正为 [[nodiscard]] 仍然不起作用。
  4. Vittorio 的语法有效。

更广泛的背景:

我需要 [[nodiscard]] 在宏 ( #define) 中工作,因为它使用的是FILENAME;但是, [[nodiscard]] 适用于函数或函数返回的值,而我没有函数,因此 [[nodiscard]] 不起作用。

我终于使用匿名 lambda 函数解决了这个问题,如下面的简化示例所示。

另一种方法是将 [[nodiscard]] 直接应用于 lambda 函数。不幸的是,C++ 不支持(还)[[nodiscard]] 的 lambda 函数。以下 g() 的语法有效

0 投票
1 回答
146 浏览

c++ - 为什么 [[nodiscard]] 只鼓励编译器发出警告而不要求它?

[[nodiscard]]C++17 标准中引入的属性,如果是

... 可能评估的丢弃值表达式,...,鼓励实现在这种情况下发出警告。

资料来源:n4659,C++17 最终工作草案

在cppreference上使用了类似的措辞,以防“违规”:

鼓励编译器发出警告。

为什么用鼓励这个词而不是要求void是否存在编译器最好不发出警告的情况(显式转换为 除外)?在相对安全的要求无论如何都发出警告的特定情况下软化标准语言的原因是什么(再次,除了,说,明确的强制转换为无效)?

0 投票
1 回答
145 浏览

c++ - 为什么 STL Container 函数 empty() 标记为 [[nodiscard]]?

似乎empty()是唯一被标记为nodiscard.

其他类似的功能size()还没有。

这是为什么 ?

0 投票
1 回答
362 浏览

c++ - 拥有 [[nodiscard]] 类型的理由是什么?

在哪些用例中使用[[nodiscard]]类型是有益的?

在类型上,[[nodiscard]]如果任何返回该类型实例的函数的返回值被省略,则发出警告;(引自 p0068r0):

如果 [[nodiscard]] 被标记在一个类型上,它使得所有返回该类型的函数都是隐式的 [[nodiscard]]。

虽然[[nodiscard]]构造函数(c ++ 2a)对于管理资源(例如)的类非常有用,而unique_ptr函数的nodiscard例如很有用,因为make_unique我无法想出一个类型的nodiscard有用并且我感兴趣的示例使用它的情况。

0 投票
3 回答
295 浏览

c++ - 为什么 unique_ptr::release 没有用 [[nodiscard]] 定义?

添加了C++17[[nodiscard]]

C++20增加了[[nodiscard]]onempty方法的使用,例如——也许是为了避免用户与 clear 方法混淆(即意外调用empty()以清除向量)。vector::empty()

为什么 C++20 不利用这个机会添加[[nodiscard]]unique_ptr::release?


是否存在一个有效合理的场景,在这种场景下,人们会在unique_ptr::release不获取返回值的情况下进行调用?


以同样的方式避免用户混淆(如果这是添加方法的原因[[nodiscard]]empty- 名称release总是非常令人困惑,听起来,嗯......这里会发布一些东西。

在某种程度上,添加[[nodiscard]]可以解决这个名称问题。

0 投票
0 回答
33 浏览

c++ - 为什么 std::source_location 的吸气剂没有标记为 [[nodiscard]]?

根据: https ://en.cppreference.com/w/cpp/utility/source_location

吸气剂未标记为 [[nodiscard]]。

是否有一个原因?除了返回值之外,它们在调用时是否有影响?

0 投票
0 回答
262 浏览

c++ - Clang默认强制执行[[nodiscard]]?

C++17 具有nodiscard防止人们忽略函数返回值的属性。

将它添加到代码库中的每个函数似乎有点过头了。

是否有一个标志告诉 Clang 默认强制执行此操作?

0 投票
3 回答
730 浏览

c++ - 运营商是否需要nodiscard?

操作员的[[nodiscard]]属性是必需的吗?或者假设编译器会像对大多数可疑丢弃的东西一样发出警告是否安全?

例如重载operator+,应该应用该属性吗?诸如函数转换运算符或新运算符之类的特殊运算符呢?什么时候学究气?