Exception 例外担保人vs 2013推回

Exception 例外担保人vs 2013推回,exception,c++11,vector,visual-studio-2013,stl,Exception,C++11,Vector,Visual Studio 2013,Stl,VS2013 STL实现中是否存在错误,因为在下面的代码中,当向量重新分配对象时,它使用移动构造函数而不是复制构造函数? 我尝试了GCC4.8,它的工作原理和我预期的一样。当我添加noexpect到move构造函数时,程序会产生相同的输出(在重新分配时使用move构造函数) 安全例外情况记录在: 如果发生重新分配,如果元素的类型是可复制的或无抛出可移动的,则也会提供强有力的保证。 跟随移动构造器不保证不抛出 #include <iostream> #include <vecto

VS2013 STL实现中是否存在错误,因为在下面的代码中,当向量重新分配对象时,它使用移动构造函数而不是复制构造函数? 我尝试了GCC4.8,它的工作原理和我预期的一样。当我添加noexpect到move构造函数时,程序会产生相同的输出(在重新分配时使用move构造函数)

安全例外情况记录在:

如果发生重新分配,如果元素的类型是可复制的或无抛出可移动的,则也会提供强有力的保证。

跟随移动构造器不保证不抛出

#include <iostream>
#include <vector>

using namespace std;

class Movable {
private:
    std::string name;
public:
    Movable() {

    }

    Movable(const Movable& other) {
        name = other.name;
        std::cout << "Copy constructor Movable" << std::endl;
    }

    Movable(Movable&& other) /*noexcept*/ {
        std::cout << "Move constructor Movable" << std::endl;
        name = std::move(other.name);
    }
};

int main() {
    std::vector<Movable> vec;
    Movable moved;
    for (int i = 0; i < 10; i++) {
        vec.push_back(moved);
    }
}
#包括
#包括
使用名称空间std;
阶级流动{
私人:
std::字符串名;
公众:
可移动的{
}
可移动(常数可移动和其他){
name=other.name;

std::cout VS不支持
noexcept
,因此它不能基于此进行任何检查。好的,但无论如何,如果没有noexcept,它应该调用复制构造函数。