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+会有一个奇怪的语义)
通过做你做的,你只是使代码更复杂.编译器可能很困惑,无法警告您可能的错误.
通常,当你必须使用聪明的技巧来做简单的事情时,这意味着出了问题.