可能重复:
How come a non-const reference cannot bind to a temporary object?
首先,我理解标准要求临时工具只能绑定到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将是一种巧妙的做事方式,除非我们不被允许。