批注《Effective C++》

一点拙见

条款01:视c++为一个语言联邦

四大次语言:COOCTemplateSTL

条款02:尽量以const,enum,inline 替换 #defeine

1.宏报错时,只报数值,不报变量名

2.作用域广,无封装性

3.类中的常量可声明static,记得在类外(实现文件)重定义,别忘了const

4.有的编译器不允许数组长度为static,可用enum hack实现

enum{a = 5};
int arr[a];

  像#define一样无法获得地址(有时可能不需要)

5.形似函数的宏,虽然无函数调用的额外开销,但用Templateinline代替兼顾效率和安全

#define F(a,b) f((a) > (b) ? (a) :(b)) 
//写成下面
Template<typename T>
inline void F(const T& a, const T&b)
{
  f((a) > (b) ? (a) :(b)) ;
}

条款03:尽可能使用const

1.STL中的const_iterator 指向可变,数值不可变

2.用const做函数返回值可避免if(返回值 = 变量)的错误

3.const成员函数:(1)接口清晰,哪个函数可改对象哪个不可很清晰

                             (2)可操作const对象

4.形参是否加const可重载

5.const成员函数若返回指向该对象的非const被指针接受,那么const属性会被破坏

6.常量性转除:constnon-const函数作用差不多时(一个函数完全可以实现),为减少重复代码,可把non-const对象转成const对象,并调用const成员函数,最后移除const限制,反之不安全

int a = 0;
static_cast(a).F();    //转成const 调用const成员函数
const_cast(a);         //转回non-const

条款04:确定对象被使用前已先被初始化

1.永远在使用对象之前将其初始化

2.用成员初值列改写构造函数

3.总是在初值列中列出所有成员变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值