作者BBSealion (海狮)
看板EE_DSnP
标题[问题] 一个return的怪问题
时间Tue Oct 19 19:10:18 2010
(以下仅表达概念)
在Matrix的+ operator 的funtion 中
(+operator function){
Matrix add(x,y) // 新建一个add之後回传用,x、y是大小根据传入要加的matrix决定
for回圈{
使得add = (传入的matrix)+(this matrix)
}
if(判断条件match)
回传add
else
回传(*this)
}
这样做会出问题,检查很久发现,问题症结点竟发生在
多回传了*this ??
也不一定是return *this才出问题,return 0 也一样
只要我用判断式去决定要回传两样不同东西中的哪样
if(X)
return a
else
return b
即使条件X没触发,他还是会造成不同(莫名的多建构和解构了一些物件)
会和单纯的return b做不一样的事情
所以,我尝试改成以下测试看看
if(判断条件match)
回传add
else
cout<<"not match"
回传就正确了(我想要的add真的传回去了)
表示应该不是我在回传add时没有设定好(吧)
---
而後我发现
我只要在那个operator的建构function任何地方加上三行
if(条件){
return ...
}
即使条件无触发,感觉上这三行就只是无用的garbage
但还是会造成最後return add时只return一堆乱码
---
最後我改成
if(match){
add = this + m
}
else{
add = this
}
return add
就成功了 确实照我想要的,判断match就回传有加过的,不match就回传原来的
但这样写实在有点罗嗦... 因为那两个判断式内容我都弄的有点长
---
可以问一下这个问题的症结点在哪吗
我用ddd trace他的过程到头很晕orz,还是没有看出来
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.220.200
※ 编辑: BBSealion 来自: 218.168.220.200 (10/19 19:19)
1F:推 yangjiunru:检查一下"Copy constructor"和"operator ="? 10/19 22:47