zoukankan      html  css  js  c++  java
  • 对象函数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说"程序员的未来就是榨取程序员"
    这个程序员对这个未来不满意,于是他又去问上帝。
    "万能的上帝呀,请你告诉我,我的未来会怎样?"
    上帝说"我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的"
    于是他去问侯捷。
    侯捷说"程序员的未来就是诱惑程序员"
    这个程序员对这个未来不满意,于是他又去问上帝。
    "万能的上帝呀,请你告诉我,我的未来会怎样?"
    上帝摇摇头"唉,我的孩子,你还是别当程序员了")

  • 相关阅读:
    Elasticsearch--预匹配器
    Elasticsearch--建议器
    Elasticsearch--聚合
    Elasticsearch--扩展索引结构
    Elasticsearch--更好的搜索_加权得分,脚本,同义词
    Elasticsearch--搜索
    信息论基础概念
    一个人的思想决定一个人的行为,一个人的行为决定一个人的习惯,一个人的习惯决定一个人的性格,一个人的性格决定一个人的命运,一个人的命运决定一个人的一生。
    宝塔的外网地址忘记 解决办法
    一定要先看文档 hyperf
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3069670.html
Copyright © 2011-2022 走看看