- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高质量程序设计指南读书笔记
高质量程序设计指南读书笔记(1) - [读书笔记]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明/logshtml
函数:参数:1。参数命名要恰当,顺序要合理。例如编写字符串拷贝函数StringCopy,它有两个参数。如果把参数名字起为str1 和 str2,例如
1 void StringCopy(char *str1, char *str2);
那么我们很难搞清楚究竟是把str1 拷贝到str2 中,还是刚好倒过来。可以把参数名字起得更有意义,如叫strSource 和strDestination。这样从名字上就可以看出应该把strSource 拷贝到strDestination。还有一个问题,这两个参数那一个该在前那一个该在后?参数的顺序要遵循程序员的习惯。一般地,应将目的参数放在前面,源参数放在后面。如果将函数声明为:??
1 void StringCopy(char *strSource, char *strDestination);
别人在使用时可能会不假思索地写成如下形式:
1 char str[20];2 StringCopy(str, Hello World); // 参数顺序颠倒
2。如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。例如:
1 void StringCopy(char *strDestination, const char *strSource);
3。如果输入参数以值传递的方式传递对象,则宜改用“const ”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。返回值:1。不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。函数内部实现的规则:1。在函数体的“出口处”,对return语句的正确性和效率进行检查。如果函数有返回值,那么函数的“出口处”是return 语句。我们不要轻视return 语句。如果return 语句写得不好,函数要么出错,要么效率低下。注意事项如下:(1)return 语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
例如
1 char * Func(void)2 {3 ?? char str[] = hello world; // str 的内存位于栈上4 ?? /* ... */5 ?? return str; // 将导致错误6 }
(2)要搞清楚返回的究竟是“值”、“指针”还是“引用”。(3)如果函数返回值是一个对象,要考虑return 语句的效率。例如
1 return String(s1 + s2);
这是临时对象的语法,表示“创建一个临时对象并返回它”。不要以为它与“先创建一个局部对象temp 并返回它的结果”是等价的,如
1 String temp(s1 + s2);2 return temp;
实质不然,上述代码将发生三件事。首先,temp 对象被创建,同时完成初始化;然后拷贝构造函数把temp 拷贝到保存返回值的外部存储单元中;最后,temp 在函数结束时被销毁(调用析构函数)。然而“创建一个临时对象并返回它”的过程是不同的,编译器直接把临时对象创建并初始化在外部存储单元中,省去了拷贝和析构的化费,提高了效率。类似地,我们不要将
1 return int(x + y); // 创建一个临时变量并返回它
写成
1 int temp = x + y;2 return temp;
由于内部数据类型如int,float,double 的变量不存在构造函数与析构函数,虽然该“临时变量的语法”不会提高多少效率,但是程序更加简洁易读。2。尽量避免函数带有“记忆”功能。在C/C++语言中,函数的static局部变量是函数的“记忆”储存器。建议尽量少用static局部变量,除非必须。3。用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误情况。使用断言:断言 assert 是仅在Debug 版本起作用的宏,它用于检查“不应该”发生的情况。在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。assert 不是一个仓促拼凑起来的宏。为了不在程序的Debug 版本和Release 版本引起差别,assert 不应该产生任何副作用。所以assert 不是函数,而是宏。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。如果程序在assert 处终止了,并不是说含有该assert 的函数有错误,而是调用者出了差错,assert 可以帮助我
原创力文档


文档评论(0)