Ste*_*low 5 c++ move c++17 stdoptional
std::move(*optional)和之间有有效的区别吗*std::move(optional)?哪一个更可取?
完整示例:
#include <optional>
#include <vector>
void foo()
{
std::optional<std::vector<int>> ov = std::vector<int>{};
std::vector<int> v;
v = std::move(*ov);
}
void bar()
{
std::optional<std::vector<int>> ov = std::vector<int>{};
std::vector<int> v;
v = *std::move(ov);
}
Run Code Online (Sandbox Code Playgroud)
他们做同样的事情。
在v = std::move(*ov);,*ov是 astd::vector<int>&中,因此std::move(*ov)给您一个std::vector<int>&&您试图分配给的a v。
在v = *std::move(ov); ov是 a 中std::optional<std::vector<int>>,因此std::move(ov)给您 astd::optional<std::vector<int>>&&并调用*该调用constexpr T&& operator*() && noexcept;,以便您再次拥有std::vector<int>&&要分配给的av
就我个人而言,我更喜欢v = std::move(*ov);asv = *std::move(ov);让我去:“嗯,我正在解引用,我是否有像大多数解引用所给出的左值,或者我真的有右值吗?” 我宁愿不必问自己这个问题。
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |