c – 可以复制elision / RVO导致同一对象的复制/移动
假设我有一个看起来像这样的函数:
SomeObject copy_maybe(bool make_new,const SomeObject& def) { if (make_new) return SomeObject(); else return def; } 我称之为: SomeObject obj; obj = copy_maybe(true,obj); 如果没有copy elision,这显然会导致从copy_maybe中创建的临时副本复制到obj.但是,使用copy elision / RVO,是否可能从obj到obj发生复制? 更具体地说,在这些(或类似的)条件下,是否可以在复制操作符(void operator =(SomeObject const& other))中,由于复制省略,这个和& other会相同吗? 我在Ideone上创建了一个test,它返回单独的地址,但我只是想确保这个行为是由规范定义的. 解决方法
编号复制elison / RVO用于初始化变量的过程.因为你已经使用SomeObject obj初始化了obj;你不会得到任何优化.将调用复制赋值运算符,并且将从函数中为来自调用站点的obj分配obj的值. 如果你有 SomeObject obj = copy_maybe(true,obj); 然后是的,复制elison可以(将在C 17中)发挥作用. 请注意打电话 SomeObject obj = copy_maybe(false,obj); 将obj留在一个不确定的状态,因为它将是相同的 SomeObject obj = obj; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |