love in C++, live on MFC

to get ready...

C++博客 首页 新随笔 联系 聚合 管理
  47 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks
在写函数的时候,很多函数只是设置某个变量然后做一些其他的相应的处理,比如:
void CInstruction::SetName(const CString& strName)
{
    m_strName 
=
 strName;    

            //some other operations
    if(!IsRed())
    {
        //...        
    }
}
这样的函数,返回类型为void顺理成章.

但是,随着程序继续往下写,需要处理的情况越来越复杂,这个时候,发现SetName这个函数,返回void已经不够用了,因为可以需要知道SetName这个函数调用有没有成功,因为可能传入的strName不一定是合法的,如果调用SetName函数没有成功,可能要继续调用别的函数,这个时候,可能就要讲返回类型改为BOOL.

而后来继续想,一个函数的返回值,应该更加充分的利用,调用一个函数时,就该充分的利用它的返回值;而在写一个函数时,也应该注意到这一点.如果实在没有什么值好返回,就返回TRUE

所以,对于函数,如果在设计时准备把返回类型定为void,其实可以改为BOOL
1)最初可能没有用,但情况会越来越复杂
2)充分利用函数的返回值
posted on 2006-05-17 16:12 flyingxu 阅读(2960) 评论(10)  编辑 收藏 引用 所属分类: C++ Coding Standards

Feedback

# re: 用返回类型BOOL替代函数返回类型void 2006-05-17 16:16 <font color="#FF00FF" >Stone Jiang
为什么不返回为 long (HRSEULT)呢?

返回0表示成功,非0表示出错的原因  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-05-17 17:22 LOGOS
那么麻烦,用异常好了  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-05-17 18:57 christanxw
关于是用返回值还是异常一直都是个令人烦恼的话题。
不过我认为自己开发的程序如果只是自己使用的话,用返回值是最好的(当然适当的加上日志记录最好了)。因为你自己知道什么时候作错误处理。如果是开发库给别人使用,用异常可能比较好,因为你不知道你的客户该怎么去处理错误,所以应该把错误处理的主动权交给客户。  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-05-17 22:36 flyingxu
@&lt;font color=&quot;#FF00FF&quot; &gt;Stone Jiang
也可以,道理是一样的,就是一定要利用好返回值,而不返回void
  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-05-18 09:11 沐枫
从目前来看,用异常,在OOP方面已经很普遍了。
它对于栈展开,对象自我析构,和资源管理方面可以做得很好。
另外,在C++中,应使用bool代替BOOL。  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-05-22 09:26 沐枫
另外,对于楼主的例子,还是不要有返回值的好。因为这容易引起误用。函数的用户常常会以为SetName返回的是未设置以前的值,而不是错误与否。  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-05-23 22:29 txf
返回值这个东西,个人觉得是宁缺勿滥,设置返回值就要暗示使用者该调用可能失败,不可忽略,而如果将目前不会失败的函数也加个返回值,结果就像病毒一样从使用了你的函数的调用链上的所有函数的返回类型可能都得强制使用你的返回类型,必竟通常只有最外层(界面层)会调用个类似GetLastError之类的函数查看具体错误描述,程序中到处是以下代码:
RESULTTYPE result;
result= Call_Func1();
if(!result)
{
RELEASE_RESOURCE1;
return result;
}
...
result= Call_Func1();
if(!result)
{
RELEASE_RESOURCE2;
return result;
}
...
最终,如果我是那个可怜的用户,我要么放弃你的函数,要么放弃返回值检测。
如果你好心的告诉用户某函数会一直返回TRUE,那更糟糕,因为你将破坏你的函数的用户在使用函数方面的心理模型,就像你的软件是设置成按左键弹出操作菜单,那么绝大多数右派迟早会有心理障碍。
  事实上,在程序中大多数函数调用失败是无法修复的,最终的结果是在界面上告诉用户操作失败了,因此异常会是错误处理方面的更好选择,即使错误可修复,用异常也仅仅比函数调用多个把花括号而已,省去的是大把大把的return result;语句。  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-05-26 11:34 alki
纯属误导
唉,这里面什么人都有  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-06-08 23:16 flyingxu
@alki
可能有一点,不过我的理解是"One way of measuring the quelity of a design is to see how well it handles variation"
hehe,摘抄的,不过我蛮同意的,因为实际项目中的变化,原超过想象

我也是cpp新手,大家共同学习。
  回复  更多评论
  

# re: 用返回类型BOOL替代函数返回类型void 2006-06-14 17:11 零点一刻
我也觉得习惯性返回void是不好的。
只是上面举的这个例子不够恰当罢了。
在调试的时候尤其有用。MFC的VERIFY宏不是用来看的。
按照txf 的看法,用API编程的人都该改行了。

个人认为异常是你无法控制的错误,至少VC对于异常的处理效率还是很低的,需要用到内核调用。而且C++没有象java那样在语法上强制处理异常。

BOOL 是MFC的习惯。  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理