这是我的第一篇文章,我希望我做得好。我试图解决这个问题一段时间了,但在此期间只是去了一个中间变量。这就是我的意思:
//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 ++程序,同时提高速度\内存使用效率。
非常感谢您提供任何帮助。
答案 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()
。