小编Mar*_*oll的帖子

为什么可以从 const std::Optional 中进行 std::move 值?

为什么下面的代码片段是合法的 C++ 代码?这是一个纯粹的理论问题 - 我没有想到任何用例:

#include <optional>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> v{1, 2, 3};
    const std::optional<std::vector<int>> ov = v;
    const auto nv = std::move(ov.value());

    for (const auto& x : *ov) { std::cout << x; }
    for (const auto& x : nv) { std::cout << x; }
}
Run Code Online (Sandbox Code Playgroud)

这产生了123123,但我不明白原因。

  1. 为什么 astd::move应用于 a 的值const optional
  2. 为什么optional ov仍然持有vector

是否ov.value()在内部创建一个临时副本,然后从中移动?

c++ stdmove stdoptional

13
推荐指数
1
解决办法
761
查看次数

标签 统计

c++ ×1

stdmove ×1

stdoptional ×1