此代码有错误。
[Error] no matching function for call to Complex::Complex(Complex)
但是当这段代码写出Complex(const Complex & newComplex)
,
只需使用const,这段代码工作正常。
为什么?我不知道为什么。请告诉我答案。
#include <iostream>
using namespace std;
class Complex {
double re, im;
public:
Complex(double _re = 0, double _im = 0): re(_re), im(_im) {}
Complex(Complex & newComplex) {
re = newComplex.re;
im = newComplex.im;
}
~Complex() {}
Complex operator + (Complex & inputComplex) {
Complex tempComplex;
tempComplex.re = re + inputComplex.re;
tempComplex.im = im + inputComplex.im;
return tempComplex;
}
};
int main()
{
Complex c1(1, 0), c2(2, 1);
Complex c3(c1 + c2);
}
答案 0 :(得分:0)
当const引用传递$var_display = $_POST['display'];
$iterator = 0;
foreach ($var_display as $it) {
$iterator += 1;
echo '
<span class="ui fluid large label">Range</span>
<div class="ui divider"></div>
<form class="ui form">
<div class="field">
<div class="fields">
<div class="twelve wide field">
<div class="ui blue range" id=#range-'.$iterator.'></div>
</div>
<div class="four wide field">
<div class="ui input"><input type="text" id="input-'.$iterator.'"></div>
</div>
</div>
</div>
</form>
<div class="ui divider"></div>
';
}
(基本上是临时对象)时,它的行为与普通引用不同。
将$(document).ready(function(){
for (var i = 0; i < 40; i++) {
$('#range-'+i).range({
min: 0,
max: 10,
start: 5,
input: '#input-'+i
});
}
});
引用绑定到临时对象时,它会延长临时对象的生命周期并将其带到引用范围。非const引用不能这样做,因此构造函数不会接受rvalue
(其返回类型是临时对象)作为其参数。
答案 1 :(得分:0)
类型T &
的参数是左值引用。左值引用必须引用左值(并且临时对象不是左值)。
临时对象(例如你从c1+c2
获得)不是左值,因此对(非常)T的引用不能绑定它。
虽然它仍然是对左值的引用,但允许对const T(即T const &
或const T &
)的引用绑定到临时对象。
对于某些情况(但可能不是这种情况),您可能需要考虑使用使用右值引用的move构造函数。这让新对象&#34;窃取&#34;临时对象的内容而不是复制它。它在类似字符串或向量的情况下特别有用,它具有可能由对象拥有的大量动态分配的内存,但可以通过复制从一个对象移动到另一个对象指针而不是所有数据。