【发布时间】:2018-04-11 17:49:57
【问题描述】:
假设我有一个如下所示的函数:
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_maybe 中创建的临时文件复制到obj。但是,使用复制省略/RVO,是否有可能从obj 复制到obj?
更具体地说,在这些(或类似的)条件下,在复制运算符 (void operator=(SomeObject const &other)) 中,this 和 &other 是否可能由于复制省略而相同?
我在 Ideone 上创建了一个 test,它返回单独的地址,但我只是想确保此行为由规范定义。
【问题讨论】:
-
这或多或少是我得出的结论,但我对规范的理解不够好,无法得出结论性的答案。
标签: c++ copy-elision return-value-optimization