C++ 是否可以使用;这";在c++;要在成员函数中创建本地对象?
我有一个关于“this”关键字的问题。我有一个叫做“BiPoly”的类,它表示二元多项式。有一个名为C++ 是否可以使用;这";在c++;要在成员函数中创建本地对象?,c++,this,C++,This,我有一个关于“this”关键字的问题。我有一个叫做“BiPoly”的类,它表示二元多项式。有一个名为BiPoly::differentificationex()的成员函数,它获取部分微分wrt X,并且是自修改的 template <class NT> BiPoly<NT> & BiPoly<NT>::differentiateX() { if (ydeg >= 0) for (int i=0; i<=ydeg; i+
BiPoly::differentificationex()
的成员函数,它获取部分微分wrt X,并且是自修改的
template <class NT>
BiPoly<NT> & BiPoly<NT>::differentiateX() {
if (ydeg >= 0)
for (int i=0; i<=ydeg; i++)
coeffX[i].differentiate();
return *this;
}//partial differentiation wrt X
模板
BiPoly&BiPoly::differentialex(){
如果(ydeg>=0)
对于(int i=0;i,您可以在*上使用复制构造函数,生成多项式对象的副本,然后对其进行微分和求值:
BiPoly<NT> copy(*this);
copy.DifferentiateX();
NT val = copy.eval1(arg);
BiPoly复制(*此);
copy.differentialex();
NT val=副本.eval1(arg);
根据您存储系数的方式(例如,在标准向量中),您甚至可能不需要实际编写复制构造函数。您可以在*上使用复制构造函数,生成多项式对象的副本,然后对其进行区分和计算:
BiPoly<NT> copy(*this);
copy.DifferentiateX();
NT val = copy.eval1(arg);
BiPoly复制(*此);
copy.differentialex();
NT val=副本.eval1(arg);
根据您存储系数的方式(例如,在标准向量中),您甚至可能不需要实际编写复制构造函数。您不应该返回对在函数内创建的临时对象的引用。它将在函数退出时被销毁
您最好将函数声明为:
template <class NT>
BiPoly<NT> BiPoly<NT>::differentiateX() {
BiPoly nv = *this;
if (nv.ydeg >= 0)
for (int i=0; i<=nv.ydeg; i++)
nv.coeffX[i].differentiate();
return nv;
}//partial differentiation wrt X
模板
BiPoly BiPoly::differentialex(){
BiPoly nv=*此;
如果(nv.ydeg>=0)
对于(int i=0;i您不应该返回对在函数内部创建的临时对象的引用。它将在函数退出时被销毁
您最好将函数声明为:
template <class NT>
BiPoly<NT> BiPoly<NT>::differentiateX() {
BiPoly nv = *this;
if (nv.ydeg >= 0)
for (int i=0; i<=nv.ydeg; i++)
nv.coeffX[i].differentiate();
return nv;
}//partial differentiation wrt X
模板
BiPoly BiPoly::differentialex(){
BiPoly nv=*此;
如果(nv.ydeg>=0)
对于(int i=0;ih,differentialex
函数的定义是完全正确的。它不返回对临时对象的引用,而是*此
-方法调用的对象。当然,它可以用来执行类似return BiPoly().differentialex()的操作;
但这是调用这样的方法的代码的问题,而不是方法本身。To Xion:是的,刚刚意识到他的问题是“我可以使用”这个“在成员函数中创建临时对象吗”。那么答案在某种程度上仍然有效:BiPoly nv=*this;
是使用此对象初始化时声明此类临时变量的方法。他对differentiex
函数的定义完全正确。它不是返回对临时对象的引用,而是*this
-调用此方法的对象当然,它可以用来做类似于return BiPoly().differentiex();
的事情,但这就是调用这样的方法的代码的问题,而不是方法本身。对Xion来说:是的,刚刚意识到他的问题是“我能用“this”在成员函数中创建一个临时对象吗?”。那么答案在某种程度上仍然有效:BiPoly nv=*这;
是使用此对象初始化时声明此类临时变量的方法。