将函数输出直接传递给接受参考参数的函数?

时间:2011-08-19 06:47:15

标签: c++ parameters

这是我的第一篇文章,我希望我做得好。我试图解决这个问题一段时间了,但在此期间只是去了一个中间变量。这就是我的意思:

//from a pre-built library
double getValue(int idx)
{ 
  //Returns some value from within a class 
}

//from a function I created
void setValue(double &input)
{
  //set some value here
}

我目前按照以下方式执行我的计划:

double numberOne;
numberOne = getValue(0);
setValue(numberOne);

这可以工作和编译。不过我想做点如下的事情:

setValue(getValue(0));

然而,我似乎无法做到正确(已经尝试了一些参考\去引用的东西,但我只是在黑暗中拍摄)。 我想知道是否有可能这样做?此外,如果可以这样做,那么以这种方式执行它是否有任何速度\内存空间优势,而不是具有中间存储值(也称为numberOne)。它实际上不是一个类型double值的问题,但是当它是一个具有更大占用空间的类时,我想尽可能减少内存使用量\深度复制速度\内存考虑因素。

另一方面,是否有任何书籍或在线资源可以帮助我加快我的C ++程序,同时提高速度\内存使用效率。

非常感谢您提供任何帮助。

3 个答案:

答案 0 :(得分:4)

改变这个:

void setValue(double &input)

void setValue(double input) 

毕竟,input应该是真的输入,所以setValue()应该这样对待它。如果您通过值传递,此表现甚至更糟。但是,对于大类,您可能希望将其更改为引用避免复制并实现更好的性能:

void setValue(const VeryBigClass & input) 

答案 1 :(得分:2)

函数的返回值是临时的。有一条规则是你不能将临时绑定到非const引用,因为它会导致很多错误。

您可以将临时绑定到const引用,例如

SetValue(const double& value);

这对于更大或更复杂的类型更有用,但对于像double这样的原始类型,您也可以按值传递它

SetValue(double value);

答案 2 :(得分:0)

你改变你的setvalue:

void setValue(const double &input)
{
  //set some value here
}

这应该可以解决问题。

如果你的“双倍”足够大(这里没用),那么获得参考就有好处。这样,您只会在setvalue()

中复制您感兴趣的对象部分