1.让自己习惯C++

Item01:视C++为一个语言联邦

View C++ as a federation of language.

  • c语言(无异常,无重载…)
  • object-oriented C++
  • Template C++
  • STL

Item02:尽量以const,enum,inline替换#define

Prefer consts,enums,and inlines to #define

  • const:有类型检测,而#define不会进入符号表,出错不容易调试
  • enums:可以作为类中开辟数组大小的专属常量
  • inline:可以解决形似函数的宏的不确定行为
#define MAX(a,b) (a)>(b)?(a):(b)
Max(a++, b)                        //此时a可能会自增两次

Item03:尽可能用const

Use const whenever possible

  • 函数返回一个常量可避免(a * b)=c的误写
const T operator*(const T&lhs,const T&rhs);
if(a * b = c)             //if(a*b==c)的误写,此时返回为常量就可以避免错误
  • mutable可以释放non-static成员变量的bitwise constness约束,即可以在const成员函数中改变。
  • const成员函数调用non-static&&non-const成员函数是一种错误的行为。

Item04:确定对象使用前已被初始化

Make sure that object are initialized before they are used.

  • 对象成员变量(非内置类型)的初始化动作发生在进入构造函数本体之前。
  • 内置类型在本体前不保证获得初值,所以对于内置类型而言用成员初始化列表在性能上没有提升,但为了保持一致性也以该形式初始化。
  • static对象包括global对象、在namespace中、classes内、file作用域内(non-local static),以及函数内(local static)声明为static的对象。

问:
  定义于不同编译单元内的non-local static对象的初始化次序无法确定,所以当一个编译单元中使用另一编译单元中未构造完成的一个non-local static对象(全域仅需一份)时,就会出现问题。
解:
  用单例模式解决,以local staic替换non-local static(函数内的local static对象会在该函数被调用期间首次遇上该对象定义式时被初始化)。

class A{...};
A& getAInstance()         //用该函数来访问A类对象
{
	static A a;
	return a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值