从C++方法返回引用

Luc*_*cas 4 c++ reference return-by-reference

亲爱的朋友们,我担心如果我在C++中使用引用很糟糕在以下方法中GCC抱怨警告"引用本地变量'我'返回"

MatrizEsparsa& MatrizEsparsa::operator+(MatrizEsparsa& outra){
  MatrizEsparsa me(outra.linhas(),outra.colunas());
  return me;
}
Run Code Online (Sandbox Code Playgroud)

但是,通过以下更改,警告消失:

MatrizEsparsa& MatrizEsparsa::operator+(MatrizEsparsa& outra){
  MatrizEsparsa me(outra.linhas(),outra.colunas());
  MatrizEsparsa &ref = me;
  return ref;
}
Run Code Online (Sandbox Code Playgroud)

前一种方法(返回'ref'变量)是否正确\可接受?

ere*_*eOn 13

号码ref仍然是指me在通话结束时将被销毁的号码.

您应该返回结果的副本(不带前缀&).

MatrizEsparsa MatrizEsparsa::operator+(const MatrizEsparsa& outra) const {
    return MatrizEsparsa(outra.linhas(),outra.colunas());
}
Run Code Online (Sandbox Code Playgroud)

我还添加了两个const说明符(对于参数和方法),因为我怀疑outra或者在这种情况下需要修改调用实例.(我可能错了,但是你operator+会有一个奇怪的语义)

通过做你做的,你只是使代码更复杂.编译器可能很困惑,无法警告您可能的错误.

通常,当你必须使用聪明的技巧来做简单的事情时,这意味着出了问题.