【发布时间】:2020-08-06 06:27:33
【问题描述】:
我最近阅读了 C++17 中的 [[nodiscard]],据我了解,这是一个新功能(按合同设计?),它迫使您使用返回值。这对于像 std::launder (自 C++20 以来没有丢弃)这样的有争议的函数是有意义的,但我想知道为什么 std::move 在 C++17/20 中没有像这样定义。你知道一个很好的理由还是因为 C++20 还没有最终确定?
【问题讨论】:
-
因为当您不使用它时,绝对不会发生任何坏事(或根本不会发生)。
-
@SebastianRedl:同样,没有任何有用的事情发生。这与编写空语句相同,因此
[[nodiscard]]将有助于诊断错误。此外,当vector::empty()被忽略时,也不会发生任何不好的事情,但出于显而易见的原因,它会被标记为[[nodiscard]]。 -
@SebastianRedl 这听起来是一个很好的理由标记它
[[nodiscard]]:“嘿,你做了一些完全没有意义的事情。你是不是打算做其他事情?”跨度> -
@bbalchev
std::move不动。通过std::move传递一个对象并忽略结果绝对没有任何作用。 -
@bbalchev 所有
std::move所做的只是返回一个对对象的右值引用;以便对象 可以 随后从 if 以这种方式使用引用移动。
标签: c++ c++17 language-lawyer c++20 nodiscard