可能重复:
为什么非常量引用不能绑定到临时对象?
首先,我了解标准要求临时对象只能绑定到 const 引用,并且据我所知,在这种情况下,临时对象的生命周期绑定到引用的生命周期。
除了“因为标准这么说......”为什么防止临时对象绑定到一般(即非常量)引用是一个好主意?
考虑以下情况,我们有一个需要一些工作空间的例程:
void foo(std::vector<mytype> &data, std::vector<mytype> &work)
{ // we do something to DATA but we need to use the workspace WORK
// we may resize WORK, write to it, generally use it in a non-const way
// we want to pass WORK as a parameter because we want to have the option
// of pre-allocating it (for efficiency, FOO may, but is not always, called
// inside a loop)
}
foo
为什么单独调用如下代码会如此邪恶:
// case 1
// DATA already created elsewhere
foo(data, std::vector<mytype>() );
当然我们可以这样做:
// case 2
// DATA already created elsewhere
std::vector<mytype> work;
foo(data, work);
但是随后 的生命周期work
会延长到封闭块的末尾,这可能是不需要的。
我知道有一些方法可以解决这种事情,但是这里的案例 1 将是一种很好的做事方式,除非我们不允许。