C++11为变量实例化/初始化提供了以下语法:然而,在可复制性、移动能力和赋值能力方面,类需要什么才能允许这种语法呢?Visual studio 2013 (更新2)允许这种形式的实例化,即使复制构造函数、复制赋值操作符、移动构造函数和移动赋值运算符都已被删除,而GCC (4.7.2)只允许在默认或实现移动构造
引用自C++ Primer
如果我们显式地要求编译器使用= default生成移动操作,而编译器无法移动所有成员,则移动操作将被定义为已删除。如果类的成员定义了自己的复制构造函数,但没有定义移动构造函数,或者类的成员没有定义自己的复制操作,且编译器无法合成移动构造函数,则移动构造函数被定义为已删除的。根据上述
我有一个带有已删除的移动构造函数的类,当我试图在MSVC中调用std::vector::push_back()时(v.15.8.7 Visual C++ 2017),我收到一个错误,说明我试图访问已删除的移动构造函数但是,如果我定义了移动构造函数,代码就会编译,但是永远不会调用移动构造函数。这两个版本都按预期在gcc上编译和运行