阅读《编写高质量代码》心得(3)

1.编译器对可变参数函数的原型检查不够严格,所以容易引起问题。难于差错。不利于写出高质量的代码,所以应当尽量避免使用C语言方式的可变参数设计,而用C++中更为安全的方式来替代。如Boost中的format库。—— Format库:实现类似printf的格式化对象,可以把参数格式化到一个字符串,而且是完全类型安全的。
2.慎用goto。然而有一种goto的使用情形为许多C/C++程序员所接受,那就是程序在一组嵌套循环中出现错误,无路可走时的跳转处理。
3.C++两个通用的转换原则是①为了防止精度损失,类型总是被提升为较宽的类型。②所有含有小于整型类型的算术表达式在计算之前其类型都会被转换成整型。
4.提防隐式转换所带来的微妙问题。尽量控制隐式转换的发生。通常采用的方式包括①使用非C/C++关键字的具名函数,用operator as_T()替换operao T()(T为C++数据类型)。②为单参数的构造函数加上explicit关键字。
5.void*任何类型的指针都可以直接赋值给它,无须强制转型。但在不使用强制转型的前提下,不允许将void*赋给其他类型的指针。
6.     extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。
7.要区分哪些数据对象是POD,哪些是非POD。由于非POD对象的存在,在C++中使用memcpy()系列函数时要保持足够的小心。
8.不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete.必须配对使用,不能混淆。
malloc与new之间的区别:
①new是C++运算符么,malloc是C标准库函数。
②通过new创建的东西是具有类型的,而malloc函数返回的是void*,需要强制转型。
③new可以自动调用对象的构造函数,malloc不会。
④new失败时会调用new_handler处理函数,而malloc失败则直接返回NULL.
free和delete之间的区别:
①delete是C++运算符,free是C标准库函数。
②delete可以自动调用对象的析构函数,而malloc不会。
9.realloc函数可以重新设置内存块的大小。
10.版权和版本声明使用/**/,内嵌注释用//,宏尾端的注释用/**/
11.C++ iostream程序库中的类与C stream函数虽然各有优点,但是一般推荐使用前者,因为类型安全与可扩充性对于我们更有吸引力。当然一般认为C stream函数生成的可执行文件更小。C++ iostream程序库中类会涉及对象构造、析构的问题。而C stream不会像前者那样因为构造函数带来不必要的麻烦。C stream有更强的可移植能力。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值