为什么在c ++中经常使用“out variable pattern”?

时间:2014-03-21 00:30:44

标签: c++

我不知道模式的实际名称

我通常不会编写c ++代码,但每次阅读时我都会反复看到相同的模式。

我刚刚在虚幻引擎4中找到它,看起来像这样

FVector CameraLoc;
FRotator CameraRot;
GetActorEyesViewPoint(CameraLoc, CameraRot);

我总是讨厌这种模式,因为我从来不知道哪个参数被更改,然后有时函数会期望对象被正确初始化。

为什么这种模式甚至被使用?将它包装在结构中会不会更好?

struct ActorEyesViewPoint {
    FVector CameraLoc;
    FRotator CameraRot;
};

ActorEyesViewPoint GetActorEyesViewPoint();

2 个答案:

答案 0 :(得分:4)

此模式用于防止从函数返回时不必要的对象副本。这基本上是RVOs的显式版本(http://en.wikipedia.org/wiki/Return_value_optimization

请注意,C ++ 11移动语义

不再需要这样做

答案 1 :(得分:1)

该模式的一个优点是您可以将派生类传递给采用基类的函数。

如果你有

class A {  };
class B : public A {  };

void foo(A* a);
A bar();

并且需要类B的对象,foo很有用,但bar不是。