Effective C++ 笔记

导读

声明揭示其签名式。

定义式是编译器为此对象分配内存地方。

初始化给予对象初值过程。


default构造函数要不是没有参数,要不每个参数都是缺省值。


explicit的构造函数比non-explicit更受欢迎,防止隐式类型转换。


class Widget
{
public:
Widget();
Widget(const Widget& rhs); //right hand side
Widget& operator=(const Widget& rhs);
//...
};
Widget w1;
Widget w2(w1);
w1=w2;

如果一个新对象被定义,则会有个构造函数被调用,不可能调用赋值操作。如果没有新对象被定义,就不会有构造函数被调用,当然就是赋值操作被调用。


命名:指针 p, 应用 r, 成员函数 mf。


第一部分:习惯c++

条款1:c++ ,a federation of languages

exception,templates,STL


主要的次语言:

1.C。

2.object-oriented c++:构造函数,析构函数,封装,继承,多态,virtual函数(动态绑定)...

3.template c++:泛型编程

4.STL:是个template程序库,对容器,迭代器,算法,以及函数对象的规约有紧密配合与协调。

每个次语言都有自己的规约。


条款2:prefer consts,enums,and inlines to #defines.

宁可用编译器替换预处理器。

symbol table 记号表。

使用宏 #define ASPECT_RATIO 1.653 定义,可能不会进入记号表,不易调试。使用常量来解决,const double AspectRatio = 1.653;


对于单纯常量,最好以const对象或enums 替换#defines

对于形似函数的宏macros,最好改用inline替换#defines。


条款3:use const whenever possible

如果函数的返回值是个内置类型,则改动函数返回值不合法。


成员函数是const:

bitwise const :成员函数只有在不更改对象之任何成员变量时才可以说是const,即不更改对象内的任何一个bit。


条款26:延迟变量定义出现

应该延迟变量定义,直到使用该变量前,甚至应该延迟至可以给该变量赋初值。


string encrptPassword(const string& password)

{

...

string encrypted(password);  //通过copy构造函数定义并初始化。

encrypt(encrypted);

return encrypted;

}


条款27:少做转型

1.old-style casts:

(T)expression

T(expression)

2.C++ style casets

const_cast<T>(expression)

dynamic_cast<T>(expression) :安全向下转型

reinterpret_cast<T>(expression):不可移植,结果取决于编译器

static_cast<T>(expression):强迫隐式转换


对象布局方式和它们的地址计算方式随编译器的不同而不同。


p122:
class Window
{
public:
virtual void blink(){}
};


class SpecialWindow:public Window
{
public:
virtual void blink()
{
//...
}
};


typedef std::vector<std::tr1::shared_ptr<Window> > VPW;
VPW winPtrs;


for (VPW::iterator iter=winPtrs.begin(); iter!=winPtrs.end();++iter)
{
(*iter)->blink();
}


成员函数返回references,指针,迭代器可以用来取得某个对象,降低对象封装性,应该避免。


条款29:异常安全


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值