【发布时间】:2014-12-22 06:14:04
【问题描述】:
过去我已经能够找到多个关于此的对话(例如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 尚未实现的东西,还是我的代码中缺少某些东西? I know that you cannot mark move constructors as default,但这并不意味着编译器不支持全部生成默认移动构造函数。
【问题讨论】: