如何理解C与C++,C++ effective总结

1.C++以C为基础,区块,语句,预处理器,内置数据类型,数组都来自C, C的局限性:

没有 template,exception, overloading.class,

2.尽量用const,enum,inline 替换#define  即宁可以编译器替换预处理器,首先是#define没有封装性,不方便封装到class内,而且class 内也不能定义 #define 

      inline与#define的比较

     #define call_with_max(a,b)  f((a)>(b)?(a):(b) 

   调用时要考虑很多,以后再补充,但是你如果用template  和inline写 很方便

   template<typename T> 

  inline void  call_with_max(const T&a,const T& b){

 f(a>b?a:b);}

这样不需要担心参数被修改,还可以植入class内。

3.尽可能多用const 

可以在class 内class外,namespace中也可以用,可以修饰static 和non-static成员变量。

const   char* p=greeting;//non const pointer,const data 

const char* const p=greeting ;//const pointer,const data;

在函数参数中用const 可以方式参数调用结果被修改,就好比重载*运算符号,后面可能会有人 对(a*b) 赋值,const可以避免,

const 用作于成员函数是为了确认该成员函数可作用于const对象上, 可以判断哪个函数可以改动对象内容,哪个函数不可以。

其次是使得操作const 对象成为可能。

下面直接上图:

确定时passed by pointer  to const 还是 passed by reference to const,还是那句话,const 是常量。

 const 在函数参数后面 ,其实就是指向的函数参数this 指针,这样函数参数内的成员不可以被改写。

const 转型就需要用到 const-cast将 const 转为non-const 类型。

4.确定对象被使用前就已经被初始化, 就是少写 int x; 这类语句,尤其是指针,未初始化很可能最终成为野指针,

初始化的方式可以是手动初始化,即赋值,也可以输入输出方式初始化,  

最好在构造函数里面初始化。

效果与下面相同:

如果想要default 构造成员变量,直接后面加一个括号即可。

先写这么多了。

 

posted @ 2020-09-11 16:48  sjtu小帅哥  阅读(180)  评论(0)    收藏  举报