惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
人人都是产品经理
人人都是产品经理
小众软件
小众软件
博客园 - Franky
WordPress大学
WordPress大学
Jina AI
Jina AI
Google DeepMind News
Google DeepMind News
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
博客园 - 【当耐特】
IT之家
IT之家
G
Google Developers Blog
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
云风的 BLOG
云风的 BLOG
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
V
Visual Studio Blog
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
GbyAI
GbyAI
雷峰网
雷峰网

博客园 - liuchen

我回来了 《全景探秘游戏设计艺术》读后感之引子 长连接和短连接 这不科学 —— 读《死亡之旅》 windows 64位 luajava编译 Effective C++ 读书笔记(45-50):杂项讨论 Effective C++ 读书笔记(35-44):继承关系与面向对象设计 Effective C++ 读书笔记(29-34):类与函数之实现 Effective C++ 读书笔记(18-28):类与函数之设计和声明 Effective C++ 读书笔记(11-17):构造析构和赋值函数 - liuchen Effective C++ 读书笔记(5-10):内存管理 读《msyql完全手册》之三:管理与开发 读《msyql完全手册》之二:数据库使用 读《msyql完全手册》之一:介绍和安装 js中的定时器 php中readdir关于时间路径排序的代码 linux 配置服务器 Windows下配置SVN (Subversion) 转载 该适当的总结了
Effective C++ 读书笔记(0-4) - liuchen
liuchen · 2009-09-18 · via 博客园 - liuchen

一年前读此书,在书上乱写乱画,自认为对C++懂了。现在正式从事编码工作,看了别人的代码才发现自己其实并没有懂得很多,因此,重新拾起之前的书,认认真真开始记录笔记。

0--序言

四个转型运算符:比如static_cast<int>(32.12)
const_cast
:将对象或指针的常数型转型掉
dynamic_cast
:用来执行"安全的向下转型动作"
reinterpret_cast
:转型的结果取决于编译器
static_cast
:没有其他合适的转型运算符可用,就用这个,和传统转型运算符最接近

Item 1 -- 尽量以const和inline取代#define

const的好处是,调试时,可以直接获取变量,而非定义的数字,这个在使用gdb跟踪代码的时候很有用,比如#define NUM 123;如果在gdbprint NUM,会出现NUM找不到符号表的问题,这样在复杂表达式中出现NUM进行watch的时候要回去找NUM的具体值很郁闷。

使用const不仅如此,其不允许改动的语义才是其存在的精华, 常量指针和指针常量很容易让人弄混,来再记一遍,星号在中间,左定内容右定针。
const char *p;    char const* p
都表明p指向的内容不能变
char * const p
则表明指针不能变
bt一点的就是牵扯到typedef了,typedef能够破坏const的语义,参考下面的链接
http://hi.baidu.com/%C6%AE%D4%DA%B1%B1%BE%A9/blog/item/92e3554e22307d0db2de0540.html
http://hi.baidu.com/xiaoshumuzi/blog/item/34ff22386487eaf8b311c716.html

抛弃#define使用inline的原因就是类似#define max(a,b) ((a)>(b)?(a):(b)) 这种写法除了使用无数括号很bt之外,max(++a,b)这个简单的表达式便可轻而易举废掉程序员的本意,这点足以放弃#define

Item 2 -- 尽量以<iostrem>取代<stdio.h>

EC(Effective c++)给出Item2的理由,cin/cout型别安全,比如Rational r; cout<<rstdio.h中是无法想象的。当然,Rational要针对<<进行支持,有关写operator <<又是一个要讨论的Item,这里事先给出正确写法
class Rational{
    friend ostream& operator<<(ostream&s, const Rational& r)
}

其实对于我这种学习的时候就使用cin/cout的人来讲,现在倒是感觉stdio.h这种东东很好玩,里面牵扯到fopenfputfwrite等等底层IO接口,深入研究也是对计算机IO更好的了解

Item 3 --  尽量以new和delete取代malloc和free

new的过程:申请内存(也即malloc的作用),调用构造函数,返回对象指针(后面讲到operator new placement new都是基于这个基本知识)

另外,newdelete对应,mallocfree对应这个也是常识了,但是为啥呢?EC里面讲到,如果混用会导致不可预料的错误。

Item 4 -- 尽量使用C++风格的注释形式

其实就是相对/**/这种注释,多用用//,而//VS2005以及Eclipse下面都有快捷键,VS2005Ctrl+K,C(按住Ctrl,先后按KC)取消是Ctrl+K,UEclipse则方便的多,只用Ctrl+/即可

说到注释,不能不提doxygen,最近也在看源代码,抽空得研究下,学习一下注释规范。简单搜索下,可以关注下面链接:
http://blog.163.com/jallyx/blog/static/5726580020097611042993/
http://zsxxsz.javaeye.com/blog/403539
http://www.lupaworld.com/action_viewstutorial_itemid_3735.html