您的位置:首页 > 编程语言 > C语言/C++

1.让自己习惯C++

2016-03-06 22:39 295 查看

Item01:

View C++ as a federation of language.

c语言(无异常,无重载…)

object-oriented C++

Template C++

STL

Item02:

Prefer consts,enums,and inlines to #define

const有类型检测,而#define不会进入符号表,出错不容易调试

enums可以作为类中开辟数组大小的专属常量

inline函数可以解决形似函数的宏的不确定行为

#define MAX(a,b) (a)>(b)?(a):(b)
Max(a++,b)                        //此时a可能会自增两次


Item03:

Use const whenever possible

函数返回一个常量

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成员函数是一种错误的行为。

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;
}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: