类A定义的所有复制/移动的构造/分配如下被称为无复制/移动的构造/分配的同时初始化
A f(A a) { return a; }
A g() { return A(); }
的main()
功能是这样的:
int main()
{
A a1 = f(A()); // Move-construct
A a2 = std::move(a1); // Move-construct
A a3 (std::move(a2)); // Move-construct
A a4 (a1); // Copy-construct
A a5 = a4; // Copy-construct
a5 = f(A()); // Move constructor + Move assignment
a5 = a4; // Copy assignment
a5 = g(); // Move assignment
A a6 = g(); // None!! Member-wise assignment (?)
}
可有人告诉我,为什么地球上没有任何一个构造函数和赋值操作符被调用a6
? C++ 11文档的哪一部分描述了这种行为?
http://en.wikipedia.org/wiki/Return_value_optimization – user1937198 2014-09-18 23:24:38
“成员明智的分配”在这里不是一个选项。你提供了你自己的'operator ='。 (并且'T x = y;'不是任何赋值)。 – 2014-09-18 23:35:32
正在调用默认的构造函数,然后编译器可以自由地删除副本。不是很好! – 2014-09-18 23:37:00