对象函数Effective C++ 读书笔记之Part1.Accustoming Yourself to C++

上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下对象函数

    1、View C++ as a federation of languages

    

C++的四个次语言:
1)C
2)Object-Oriented C++
3)Template C++
4)STL

    2、Prefer consts, enums, and inlines to #defines

    

一方面是因为应用宏义定不利于调试的时候定位错误,另一方面要主是因为预处理器和编译器两者分工不同所致导的。
同时,宏义定太庞杂的情况下很轻易涌现错误。
结总:
第一,对于单纯常量,最好以const对象或enums替换#defines.
第二,对于形似函数的宏(macros),最好改用inline函数替换#defines。

3、Use const whenever possible
const 法语虽然端多化变,但不并莫测高深。如果关键字const 涌现在星号左
边,示表被指物是常量:如果涌现在星号边右,示表针指自身是常量:如果涌现在
星号双方,示表被指物和针指两者都是常量。

    char greeting[] = "Hello";

    每日一道理
感叹人生,是因为曾经没有过轰轰烈烈的壮举,觉得渺小,觉得平庸,似乎生活过于简单,简单得让人感觉烦躁。没有大言不惭地说过将来,只是比较现实地握住了现在,我想,这是一条路,每个人所必须踏上的一次旅程,曾经看到过这样一句话:成长的过程漫长却充实,自毁的过程短暂却留下一生痛苦,人生可以说是一次考验,何去何从取决于自我。

    

char * p = greeting;                      //non-const pointer, non-const data
const char* p = greeting;             //non-const pointer, const data
char* const p = greeting;             //const pointer, non-const data
const char* const p = greeting;  //const pointer, const data
如果被指物是常量,有些序程员会将关键字const 写在类型之前,有些人会把
它写在类型以后、星号之前。两种写法的义意同相,所以以下两个函数接受的参数
类型是一样的:
void f1(const Widget* pw);
void f2(Widget const * pw);
两种情势都有人用,你应当试着习气它们。
STL 选代器系以针指为根据塑模出来,所以迭代器的用作就像个?针指。声
明选代器为 const 就像声明针指为 const 一样(即声明一个T* const 针指) ,表
示这个迭代器不得向指不同的西东,但它所指的西东的值是可以修改的。如果你希
望迭代器所指的西东不可被修改(即希望STL 模拟一个 const T* 针指) ,你须要
的是 const _iterator:
std::vector<int> vec;
const std::vector<int>::iterator iter = vec.begin( );  //iter的用作就像个T* const
* iter = 10;                                                                    //没有问题,转变iter所指物
++iter;                                                                           //错误,iter是const
std: :vector<int>::const iterator clter = vec.begin( );   //cIter的用作像是个const T *
*clter = 10;                                                                       //错误,*cIter是const
++clter;                                                                             //没问题 
结总:
第一,某些西东声明为const 可帮助编译器侦测错出误用法。const 可被施加于任何用作域内的对象、函数参数、函数返回类型、员成函数本体。
第二,编译器强制实行 bitwise constness ,但你编写序程时应当应用"概念上的常量性"
(conceptual constness)。
第三,当 const 和 non-const 员成函数有着质实等价的现实时,令 non-const 版本调
用 const 版本可免避代码复重。

4、Make sure that objects are initialized before they're used
     所谓 static 对象,其寿命从被结构出来直到序程结束为止,因此 stack 和heap-based 对象都被除排。种这对象括包 global 对象、义定于 namespace 用作域内的对象、在 classes 内、在函数内、以及在 file 用作域内被声明为 static 的对象。函数内的 static 对象称为 local static 对象(因为它们对函数而言是 local) ,其他 static对象称为 non-local static 对象。序程结束时 static 对象会被动自毁销,也就是它们的析构函数会在main ()结束时被动自调用。
        所谓编译元单<translation unit)是指产出单一目标件文 (singleobject file) 的那些源码。基本上它是单一源码件文加上其所含入的头件文(#include files) 。
结总:
第一,置内型对象停止手工初始化,因为 C++不保障初始化它们。
第二,结构函数最好应用员成初值列 (member initialization list) ,而不要在结构函数本体内应用赋值作操(assignment) 。初值列列出的员成变量,其排列顺序应当和它们在 class 中的声明顺序同相。
第三,为除免"跨编译元单之初始化顺序"问题,请以local static 对象替换 non-local static 对象。

感悟:
从这部份的内容大致可以看出整本书的风格,要主是在多种可以现实的情况下告知你种哪情况更加适合,更加可以免避错误。从而让读者的平水从对C++的一般解理进入到更深的层次。所列的点都是平常轻易到遇的。必须要有定一的C++实践经验才读出效果,否则看完了也记不住。跟实践经验很少的人直接去读设计模式是一个效果。

文章结束给大家分享下程序员的一些笑话语录: 一个程序员对自己的未来很迷茫,于是去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的"
于是他去问Lippman。
Lippman说"程序员的未来就是驾驭程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的"
于是他去问Gates。
Gates说"程序员的未来就是榨取程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的"
于是他去问侯捷。
侯捷说"程序员的未来就是诱惑程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝摇摇头"唉,我的孩子,你还是别当程序员了")

你可能感兴趣的:(effective)