将函数输出直接传递给接受引用形参的函数

Pass a function output straight to a function that accepts reference parameters?

本文关键字:函数 引用 形参 输出      更新时间:2023-10-16

这是我的第一个帖子,我希望我做得很好。我已经尝试解决这个问题一段时间了,但只是在此期间去了一个中介变量。这就是我的意思:

//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)。对于双精度值类型来说,这真的不是一个问题,但是当它是一个占用空间更大的类时,我希望尽可能地减少内存使用量深度复制速度内存考虑。

顺便说一句,是否有任何书籍或在线资源可以帮助我通过其他效率改进来加快我的c++程序,以加快内存使用。

提前感谢你可能提供的任何帮助。

修改如下:

void setValue(double &input)

void setValue(double input) 

毕竟,input应该是真正的输入,所以setValue()应该这样处理。这里的性能是而不是,如果按值传递则更差。然而,对于大型类,您可能希望将其更改为引用,以避免复制并实现更好的性能:

void setValue(const VeryBigClass & input) 

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

可以将临时变量绑定到const引用,如

SetValue(const double& value);

对于更大或更复杂的类型来说,这很好,但对于像double这样的基本类型,您也可以通过value

传递它。
SetValue(double value);

你的setvalue:

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

这样问题就解决了。

如果你的"double"足够大(这里它是无用的),获得引用是有好处的。这样,您将只复制您在setvalue()中感兴趣的对象的一部分。