Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以使用;这";在c++;要在成员函数中创建本地对象?_C++_This - Fatal编程技术网

C++ 是否可以使用;这";在c++;要在成员函数中创建本地对象?

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+

我有一个关于“this”关键字的问题。我有一个叫做“BiPoly”的类,它表示二元多项式。有一个名为
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=*这;
是使用此对象初始化时声明此类临时变量的方法。