C++ 从c+;中的函数返回局部变量+;?

C++ 从c+;中的函数返回局部变量+;?,c++,function,C++,Function,这是摘录自: //向量:重载运算符示例 #包括 使用名称空间std; 类CVector{ 公众: int x,y; CVector(){}; CVector(int,int); CVector运算符+(CVector); }; CVector::CVector(intA,intB){ x=a; y=b; } CVector CVector::运算符+(CVector参数){ CVector温度; 温度x=x+参数x; 温度y=y+参数y; 返回(临时); } int main(){ CVecto

这是摘录自:

//向量:重载运算符示例
#包括
使用名称空间std;
类CVector{
公众:
int x,y;
CVector(){};
CVector(int,int);
CVector运算符+(CVector);
};
CVector::CVector(intA,intB){
x=a;
y=b;
}
CVector CVector::运算符+(CVector参数){
CVector温度;
温度x=x+参数x;
温度y=y+参数y;
返回(临时);
}
int main(){
CVector a(3,1);
CVector b(1,2);
CVector c;
c=a+b;
“这条路对吗?”


是的。请注意,它不是局部变量,而是实际返回的局部变量的副本,这是完全有效且正确的做法。在通过指针或引用返回局部变量时要小心,而不是在通过值返回时,因为它是通过值返回的。Had该函数具有以下签名,它可能不正确:

CVector& CVector::operator+(CVector param);
顺便说一句,一个更高效的实现应该是:

CVector CVector::operator+(const CVector &param) const;

如果你解释一下你的困惑,我们可以给出一个比“是”更有意义的答案。如果你不考虑
operator+
通常是按照
operator+=
实现的这一事实,
return(temp)中的括号是吗
Essential?@qed不,它们是不必要的噪音。也许这样的操作会导致未定义的行为。例如,如果类存储指向构造函数中分配的某个字符串的指针,并且它只有默认的复制构造函数。@Michael:但情况并非如此,与此问题完全无关。好的。然后使用下面的链接在这里就可以了:?简而言之,通过引用传递,通过值返回。
CVector CVector::operator+(const CVector &param) const;