第一章:从C转向C++ (Effective C++ Second Edition 读书笔记)

最近项目高层软件从C语言切换C++开发,内部推荐阅读<Effective C++ Second Edition> 这本书。在此,对阅读过程中的一些所感所想做些记录。

对书中提到的一些C++开发条款和个人的理解,总结整理下笔记,以供参考。


第一章的主要内容是从C转向C++,这个比较适合笔者,因为一直以来就是用C语言开发的。

最初接触的是清华大学出版吕凤翥的<C++语言基础教程>,ISBN 7-302-03321-8,后来以学习谭浩强的经典版<C程序设计>,ISBN 7-302-03806-6 为主了。好了,不说这些了,就针对书中第一章的条款和例子,结合个人感触,整理一下几点:


条款1:“尽量用编译器而不用预处理” -- 例1:
#define ASPECT_RATIO 1.653
const double ASPECT_RATIO = 1.653;
评论:C语言宏定义在debug版本中,无法显示符号。C++定义常变量,经编译器处理后,ASPECT_RATIO会加入到符号列表中,便于编译报错和调试定位。


条款1:“尽量用编译器而不用预处理” -- 例2:
#define max(a,b) ((a) > (b) ? (a) : (b))
int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次
评论:预处理宏定义函数仅仅是简单展开,与函数编译不可同日而语。尤其在C++中大量使用++/--单目运算符,简单宏定义展开会出现不可意料的情况。


条款1:“尽量用编译器而不用预处理” -- 问题1:
不管是#define还是inline,下面的代码行
a = max(x, y);
可能会被翻译成:
a = ((x) > (y) ? (x) : (y));
评论:inline函数,根据编译器不同,有时其表现形式和#define是一致的【1】。因此反而容易引起混淆,需要特别注意。


条款2:C++代码中尽量用<iostream>而不用<stdio.h>
1) scanf和printf很轻巧,很高效,是C语言封装的50年代打印输出代码
2) iostream类型安全,可扩展性强,是C++语言封装的特殊输出类
评论:C++的iostream输出需要类进行相应的友元函数支持,从系统架构出发,C++编程中应该尽量使用iostream。

条款3:尽量用new和delete而不用malloc和free
1) malloc和free不知道构造函数和析构函数。
2) new先申请内存,然后调用构造函数。
3) delete先调用析构函数,然后释放内存。

评论:需要理解new/delete和malloc/free的本质区别以及实现流程。


条款4:尽量使用c++风格的注释
评论:C++引入//注释,本人并不完全认同这种方式比C语言/* comment */要来的好。另外Effective C++中举的注释例子也并非是好的编程习惯。因此该条款,个人认为并非非常重要。

参考资料:

【1】http://en.wikipedia.org/wiki/Inline_function


注:后续阅读比较,将会尽快整理出来!

第一章:从C转向C++ (Effective C++ Second Edition 读书笔记)

第二章:内存管理(Effective C++ Second Edition 读书笔记)

第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)

第四章 类和函数:设计与声明(Effective C++ Second Edition 读书笔记) 

第五章 类和函数:实现(Effective C++ Second Edition 读书笔记)

第六章 继承和面向对象设计 (Effective C++ Second Edition 读书笔记)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值