我之前能够找到多个关于这个问题的讨论(例如这里),但是这些讨论都是相当久远的了。我想问的代码是:
#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)中执行代码,它会对两种情况都输出“copy”。如果标准自上面链接中的答案以来没有改变,那么输出应该是“copy”后跟“move”。 Ideone似乎给出了正确的输出。这只是Visual Studio尚未实现的东西,还是我的代码有什么问题? 我知道您无法将移动构造函数标记为默认,但这并不意味着编译器不能完全支持生成默认移动构造函数。