C++ 包含boost::可选对象的std::vector对象是否可以移动?可移动增压器::可选? std::vector foo; //填充foo。

C++ 包含boost::可选对象的std::vector对象是否可以移动?可移动增压器::可选? std::vector foo; //填充foo。,c++,boost,c++11,C++,Boost,C++11,自新标准以来,向量是可移动的,但不幸的是,他们还没有使可选的可移动:( 有没有关于制作可选移动设备的计划 上面的向量会像其他向量一样有效地移动吗 std::vector组件是可移动的,无论存储的类型如何。移动操作只需要将指向一个向量中内部缓冲区的指针移动到另一个向量。存储在该缓冲区中的对象的类型是不相关的,因为它们保持在原来的位置。请注意boost::optional可能永远不会移动.对于值类型,移动并不总是有意义的(即,如果对象是按值存储的,则没有任何所有权可以转移到目标对象)@DavidRo

自新标准以来,向量是可移动的,但不幸的是,他们还没有使可选的可移动:(

  • 有没有关于制作可选移动设备的计划

  • 上面的向量会像其他向量一样有效地移动吗


  • std::vector
    组件是可移动的,无论存储的类型如何。移动操作只需要将指向一个向量中内部缓冲区的指针移动到另一个向量。存储在该缓冲区中的对象的类型是不相关的,因为它们保持在原来的位置。

    请注意
    boost::optional
    可能永远不会移动.对于值类型,移动并不总是有意义的(即,如果对象是按值存储的,则没有任何所有权可以转移到目标对象)@DavidRodríguez dribeas,所以我认为可选的主要是小的,最好是内置的,对吧?所以可选的向量(如果向量很大)我想这可能不是一个好主意?@DavidRodríguez dribeas:它应该支持与它包含的IMO类型相同的移动机制。
    boost::optional
    应该是可移动的。这取决于情况,它可能有完美的意义,但您应该注意,对象副本可能很昂贵,并且在移动操作中明确地移出选项al对象。@MooingDuck:这就是移动并不总是有意义的。在某些情况下,它可能有意义,也可能没有意义。例如,
    std::optional
    的提案支持移动构造,尽管它可能不是最自然的构造(从可选对象移动的对象仍处于激活状态,即,尽管该对象已移动,但仍有一个包含的对象)
    std::vector<boost::optional<double>> foo;
    //populate foo.