读高质量C++/C编程指南第6章

目录

参数规则

1、不要偷懒

2、命名要清晰直接

3、熟悉使用const

返回值规则

1、不要偷懒

2、提高效率

3、返回值的安全

内部实现规则

1、合法性检查

2、通用细节


该章节重点讲了函数设计应该注意的地方。

参数规则

1、不要偷懒

参数的书写要完整,不能贪图省事只写参数的类型而省略参数的名字,没有参数的话用void填充

void Add(int ,int );//不良好的风格
void Add(int a,int b);//良好的风格
void GetVal();//不良好的风格
void GetVal(void);//良好的风格

2、命名要清晰直接

书上给出了一个例子

void StringCopy(char* str1, char* str2);

从函数名可以看出这是一个字符串拷贝函数,但是从形参的命名,看不出到底是把str1内的类容拷贝到str2里面还是反过来,所以形参也不要随便命名。

如果把参数改成这样:

void StringCopy(char* strDestination, char* strSource);

这样就很有辨识度,一眼就能看出将后一个字符串拷贝给前一个字符串

这些是主观上的改变,但是为了确保使用者不小心把传参顺序弄反了,还是需要在代码层面上进行改进,避免这种情况的发生。

void StringCopy(char* strDestination, const char* strSource);

 利用const修饰变量,该变量的内容无法被修改,这样也确保了源的安全性。

3、熟悉使用const

  • 如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
  • 如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。(这里涉及到引用的知识)

返回值规则

1、不要偷懒

同样的,与参数传递一样,返回值类型也千万不要偷懒说省就省。在C语言中,凡是不加类型说明的函数一律按照整型处理。

在C++中会有很严格的类型安全检查,不写返回值的类型会报错。

无论是C还是在C++中都得明确返回值类型,没有返回值也必须声明成void类型

函数有些时候不需要返回值,但是为了增加灵活性附加返回值

例如库函数中的strcpy

char *strcpy(char *strDest,const char *strSrc);

这个返回值的目的是为了链式访问,是的代码更加灵活简洁。

int length = strlen( strcpy(str, “Hello World”) );//链式表达

2、提高效率

C++中的引用传递会提高不少的效率,减少拷贝次数。

例如:

	string_t& operator=(const string_t& s)//深拷贝
	{
		if (this != &s)//避免无效拷贝
		{
			delete[] _str;
			_str = new char[strlen(s._str) + 1];
			strcpy(_str, s._str);
		}
		return *this;
    }

如果直接传值的话,会额外拷贝一次(内存会开辟一个临时对象),降低效率。

但是引用也不能随便传,如果引用传递是一个临时变量,函数结束后会自动销毁,这是一个非常危险的操作,留下隐患。

3、返回值的安全

return语句不要返回在栈上定义的指针或者引用,因为一旦出了作用域(函数结束)会被自动销毁


内部实现规则

1、合法性检查

有些情况参数传递是不合法的,需要在入口处进行合法性检查。这里需要正确的使用断言assert来防止此类错误。

assert是仅在Debug 版本起作用的宏,它用于检查“不应该”发生的情况。可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。

不仅要检查输入参数的有效性,还要检查通过其它途径进入函数体内的变量的有效性,例如全局变量、文件句柄等。

2、通用细节

  • 函数的功能要单一,不要设计多用途的函数。
  • 函数体的规模要小,尽量控制在50 行代码之内。
  • 尽量避免函数带有“记忆”功能。例如static的局部变量

指针和引用的区别打算放在C++专栏里面在讲。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于高质量的C/C++编程,以下是一些指南和建议: 1. 遵循编码标准:选择一个适合你的团队和项目的编码标准,如Google C++编码风格指南C++核心指南,并严格遵循它。 2. 使用有意义的命名:变量、函数和类的名称应该能够清晰地表达其用途和含义,避免使用缩写和不明确的命名。 3. 注释和文档:为你的代码添加清晰的注释和文档,解释代码的目的、算法和实现细节。这将有助于他人理解你的代码,并且在未来维护时也会非常有用。 4. 异常处理:合理地处理异常情况,并确保正确地使用异常处理机制。在必要的地方使用try-catch块,并适当地抛出和处理异常。 5. 内存管理:正确地进行内存管理,确保正确地分配和释放内存。避免内存泄漏和悬挂指针,并尽量使用智能指针和RAII(资源获取即初始化)技术来简化内存管理。 6. 避免魔法数字:避免在代码中直接使用不明确的常量值,应该使用有意义的命名常量或枚举来代替。 7. 错误处理:合理地处理错误和异常情况,避免简单地忽略错误。可以使用错误码、异常或断言来处理错误情况。 8. 代码重用:尽量重用已有的代码,避免重复编写相似的代码。可以使用函数、类和模板来实现代码的重用。 9. 性能优化:在需要优化性能的地方,可以使用合适的数据结构和算法,并进行适当的性能测试和调优。 10. 测试和调试:编写高质量的测试代码,并进行全面的测试和调试。使用调试工具来定位和修复代码中的错误。 以上是一些常见的指南和建议,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值