我遇到一种情况,能够将方法调用链接到临时变量会很有帮助:

draw(Quad(0, 0, 1, 1).rotate(90));  // <-- .rotate() returns a Quad reference

struct Quad{
    Quad(float x, float y, float width, float height){...}
    Quad & rotate(float degrees){
        ...
        return *this;
    }
}

但是,我不确定临时变量是否会存活足够长的时间,以便draw()函数使用它。这样安全吗?

最佳答案

此特定用途是安全的。临时文件会一直持续到创建它的完整表达式结束为止†;在这里,full-expression是整个语句,包括对draw的调用。

通常,此模式可能很危险。下面给出了未定义的行为:

Quad & rotated = Quad(0, 0, 1, 1).rotate(90);
draw(rotated);

在我看来,我希望类型是不可变的。而不是调用函数来修改现有对象,而是调用const函数以返回新对象,而使现有对象保持不变。

†除非将其直接绑定(bind)到引用,否则会延长其生命周期以匹配引用。这在这里不适用,因为它不是直接绑定(bind)的。

关于c++ - 从临时变量返回的引用是否有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28582481/

10-11 23:14