为什么下面的代码片段是合法的 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,但我不明白原因。
std::move应用于 a 的值const optional?optional ov仍然持有vector?是否ov.value()在内部创建一个临时副本,然后从中移动?