(N)RVO 有助于在将返回值分配给新变量时避免不必要的复制和创建临时对象(从而避免复制构造函数)。
所以像这样的事情应该由 RVO 优化:
MyObj getMyObj() {
return MyObj();
}
MyObj myobj = getMyObj();
但是,调用站点对象已经存在时也会发生这种情况吗?(即在使用=
运算符而不是复制构造函数的情况下)。我试图找到有关此的文献,但 (N)RVO 似乎总是被描述为避免使用复制构造函数。不确定在这种情况下修改调用站点对象是否真的安全。
MyObj myobj;
//will getMyObj() first create a temporary object and then copy it via the = operator?
myobj = getMyObj();