Effective C++ 读书笔记1

TMP  模板元编程

 

0.explicit构造函数比non-explicit构造函数好。

1.可以用const 来代替#define 定义一个常量。

#define没有作用域,也没有封装性。

但enum不可以取地址,而const 常量能取地址。因此指针或引用不能指向enum常量。

 

#define定义宏时,可以用template inline函数代替。

#ifdef/#ifndef 很重要。

 

const vector<int>::iterator pos;    //类似T* const 即指向不变

vector<int>::const_iterator pos;  //类似const T* 即指向的元素不变。

 

函数返回值后加const 为了避免意外发生。

 

成员函数如果常量性不同就可被重载。

编译器遵循bitwise constness准则。如果想要实现logical constness,则用mutable改变const值

bitwise constness:只要成员函数声明为const,则类中任何一个成员都不能变。

logical constness:对于客户来说不变即可。

 

当重载成员函数(只有const区别),则非const调用const函数为好,中间可进行强制转换。

 

在写函数时要考虑const。

面对成员变量为const或reference时,他们一定要初始化列表,而不是赋值。

构造函数用初始化列表初始化。

当构造函数的初始化和赋值效率差不多时,则创建private函数存放共同的部分,在多个构造函数中调用。

当两个类在不同编译单元中,当一个类要用到另一个类对象时,不知道初始化顺序,所以为了确保顺序,必须定义一个函数

当变为下面时,

/*A& A()
{
    static A a;
    return a;
}
*/

情况好转。

这就是传说的singleton模式。

改进版

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值