Visual Studio 2013(更新3)中的默认Move构造函数

邓肯

过去,我已经找到了很多与此相关的对话(例如here),但是这种对话是从很早以前开始的。我有一个问题的代码是:

#include <utility>
#include <iostream>

struct Foo
{
    Foo() = default;
    Foo(const Foo &o)
    {
        std::cout << "copy" << std::endl;
    }
    Foo(Foo &&o)
    {
        std::cout << "move" << std::endl;
    }
};

struct Bar
{
    Foo foo;
};

int main(void)
{
    Bar a;
    Bar b(a);
    Bar c(std::move(a));
}

如果在Visual Studio 2013(更新3)中执行代码,则这两种情况都将打印出“副本”。如果自从以上链接中的答案以来标准没有更改,则输出应为“复制”,后跟“移动”。Ideone似乎给出了正确的输出。这仅仅是Visual Studio尚未实现的东西,还是我的代码中缺少了什么?我知道您不能将move构造函数标记为default,但这并不意味着编译器不支持一起生成默认的move构造函数。

普雷托里亚人

我知道您不能将move构造函数标记为默认构造函数,但这并不意味着编译器不支持一起生成默认的move构造函数。

不幸的是,这就是这个意思。VS2013不支持隐式生成移动构造函数和移动分配运算符。如果这样做的话,他们实际上就没有理由不接受= default语法,特别是因为允许您为复制构造函数和赋值运算符这样做。

引用MSDN:支持C ++ 11功能(现代C ++)

“ Rvalue引用v3.0”添加了新规则,以在某些条件下自动生成移动构造函数和移动赋值运算符。但是,由于时间和资源的限制,无法在Visual Studio 2013的Visual C ++中实现此功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章