我最近了解到C++17中的
[[nodiscard]]
,据我所知它是一项新功能(设计合同?),它强制你使用返回值。这对于像std::launder
这样备受争议的函数来说是有意义的(自C++20以来变成nodiscard),但我想知道为什么std::move
在C++17/20中没有被定义为这样的特性。你知道一个好的原因吗?还是因为C++20还没有确定下来?
[[nodiscard]]
可以帮助诊断错误。当忽略vector::empty()
时也不会发生任何坏事,但出于明显的原因,它被标记为[[nodiscard]]
。 - Vittorio Romeo[[nodiscard]]
: “嘿,你做了完全无意义的事情。你是想做其他的事情吗?” - Barrystd::move
并不会移动对象。通过std::move
传递一个对象并忽略结果将完全没有任何效果。 - tkausl