Effective C++ 导读 笔记

    学习程序语言根本大法是一回事;学习如何以某种语言设计并实现高效程序则是另外一回事。作者提出两方面的忠告:一般性的设计策略,以及带有具体细节的特定语言特性。

 

术语(Terminology)

 

    声明式(declaration)告诉编译器某个东西的名称和类型,但略去细节。下面都是声明式: 

 

 

    签名式(signature)就是参数和返回类型。numDigits函数的签名式是std::size_t (int)。C++对签名式的官方定义不包括返回类型,本书把返回类型视为签名式的一部分。

 

    定义式(defination)提供编译器一些声明式所遗漏的细节。对对象而言,定义式是编译器为此对象拨发内存的地点。对function或function template而言,定义式提供了代码本体。对class或class template而言,定义式列出它们的成员。

 

    初始化(initialization)是“给予对象初值”的过程,对用户自定义类型,初始化由构造函数执行。所谓default构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。构造函数声明为explicit可以阻止执行隐式类型转换,但仍可以进行显示类型转换。

    copy构造函数被用来“以同型对象初始化自我对象”,copy assignment操作符被用来“从另一个同型对象中拷贝其值到自我对象”。如果一个新对象被定义,一定会调用构造函数,如果没有新对象被定义,就是赋值操作被调用。copy构造函数定义一个对象如何passed by value。passed by value意味着“调用copy构造函数”。

 

    STL是所谓标准模板库,是C++标准程序库的一部分,致力于容器(如vector, list, set, map等), 迭代器(如vector<int>::iterator, set<string>::iterator等),算法(如for_each, find, sort等)及相关机能。

 

    一个带有不明确(未定义)行为的程序会抹煞你的辛勤努力。有战斗力的C++程序员都知道尽可能避开不明确行为。Java和.NET语言都提供Interfaces为语言元素,但C++没有,本书的接口是指一般性的设计观念。客户(client)是指某人或某物,他(或它)使用你写的代码(通常是一些接口)。

 

命名习惯(Naming Conventions)

 

    作者喜欢两个参数名称lhs和rhs,分别代表"left-hand side"(左手端)和"right-hand side"(右手端),常常以它们作为二元操作符函数如operator==和operator*的参数名称。对于成员函数,左侧实参由this指针表现出来,所以有时我单独使用参数名称rhs。常以Widget class示例,"Widget"并不代表任何东西,只是当需要一个示范用的class名称时偶尔采用的名称。常“指向将一个T型对象”的指针命名为pt,意思是"pointer to T"。对于references,rw可能是一个reference to Widget,ra则是个reference to Airplane。讨论成员函数时,偶尔会以mf为名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值