我遇到一种情况,能够将方法调用链接到临时变量会很有帮助:
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/