gpt4 book ai didi

c++ - 从 C++ 方法返回引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:49 25 4
gpt4 key购买 nike

亲爱的 friend 们,我担心我是否在 C++ 中错误地使用了引用在下面的方法中,GCC 提示警告“返回对局部变量‘我’的引用”

MatrizEsparsa& MatrizEsparsa::operator+(MatrizEsparsa& outra){
MatrizEsparsa me(outra.linhas(),outra.colunas());
return me;
}

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

MatrizEsparsa& MatrizEsparsa::operator+(MatrizEsparsa& outra){
MatrizEsparsa me(outra.linhas(),outra.colunas());
MatrizEsparsa &ref = me;
return ref;
}

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

最佳答案

没有。 ref 仍然引用 me,它将在调用结束时被销毁。

您应该返回结果的拷贝(不以 & 为前缀)。

MatrizEsparsa MatrizEsparsa::operator+(const MatrizEsparsa& outra) const {
return MatrizEsparsa(outra.linhas(),outra.colunas());
}

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

通过执行您所做的操作,您只会使代码更加复杂。编译器可能感到困惑,无法警告您可能的错误。

通常,当您必须使用巧妙的技巧来做简单的事情时,这意味着有问题。

关于c++ - 从 C++ 方法返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com