将临时工具与参考文献绑定

时间:2011-06-30 02:07:50

标签: c++ temporaries

  

可能重复:
  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将是一种巧妙的做事方式,除非我们不被允许。

0 个答案:

没有答案