Effective C++笔记1

Effective C++笔记1
1、 对于单纯常量,最好以 canst 对象或 enums 替换 #defines。
对于形似函数的宏 (macros) ,最好改用 inline 函数替换 #defines。

2、 尽量使用const。
注意函数可根据指针形参和引用形参是否有const而实现重载,通过值传递的形参则不能根据是否有const而实现重载。
当 const 和non-const 成员函数有着实质等价的实现时,令 non-const 版本调
用const 版本可避免代码重复。例如:
Const版本完全做掉了non-const版本该做的一切,唯一的不同是其返回类型多了一个const资格修饰。这种情况下如果将返回值的const转除是安全的,因为不论谁调用non-constoperator ( ]都一定首先有个non-const对象,否则就不能够调用non-const函数。所以令non-constoperator[]调用其const兄弟是-个避免代码重复的安全做法一→即使过程中需要一个转型动作。但const成员函数调用non-const成员函数"是一种错误行为。

3、 确定对象在使用前被初始化
   内置型对象进行手工初始化,因为 C++ 不保证初始化它们。
   构造函数最好使用成员初值列 (member initialization list) ,而不要在构造函数本体内使用赋值操作(assignment) 。初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同。
    为免除"跨编译单元之初始化次序"问题,请以local static 对象替换non-local static对象常用的方法是,将每个non-local static对象搬到自己的专属函数内(该对象在此函数内被声明为static)。这些函数返回一referenc指向它所含的对象。然后用户调用这些函数,而不直接指涉这些对象。换句话说,non-local static对象被local static对象替换了。这是Singleton模式的一个常见实现手法。
改进前的代码:
class FileSystem
{ //来自你的程序库
public:
std::size t n umDisks() canst; //众多成员函数之一
};
extern FileSystem tfs; //预备给客户使用的对象;
//tfs代表"thefile system" 
class Directory 
{ //由程序库客户建立
public:
Directory( params );
} ;
Directory::Directory( params )
{
std::size t disks = tfs.numDisks(); //使用tfs对象
}
改进后的代码:
class FileSystem { ... );
FilleSystem& tfs()
{
static FileSystem fs;
return fs;
}
class Directory { ... );
Directory::Directory( params)
{
std::size t disks = tfs() .n umDisks( );
}
Directory& tempDir()
{
static Directory  td;
return td;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值