如果我理解正确,移动语义允许从临时的未命名对象中移动和重复使用资源。尽管在移动语义之前,返回值优化(RVO)更进一步并“窃取”整个对象以避免额外的构造函数调用和赋值/复制函数。
这对我来说似乎有点违反直觉,如果被调用的构造函数直接使用最终左值目标的地址来直接插入数据到用户需要的位置,那么它不是更快、更简单和更容易理解吗?
我的意思是,“在此位置创建此对象”似乎比“在某个地方创建此对象,然后将其复制到其正确的位置”更直观。
这对我来说似乎有点违反直觉,如果被调用的构造函数直接使用最终左值目标的地址来直接插入数据到用户需要的位置,那么它不是更快、更简单和更容易理解吗?
我的意思是,“在此位置创建此对象”似乎比“在某个地方创建此对象,然后将其复制到其正确的位置”更直观。
f()
会直接返回到a
的地址,其余的都会返回到调用f()
时使用的临时对象的地址。毕竟,唯一的赋值是从f()
的返回值到a
。 - user2341104f()
来说,它将位于a
的位置。毕竟,重点是消除复制/赋值。但用户不必显式提供返回地址,编译器可以处理,对于 lvalue 和 rvalue 作为 lvalue 槽。毕竟,即使用户想要指定未命名临时变量的地址,他也无法指定。 - user2341104