如何理解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 构造成员变量,直接后面加一个括号即可。
先写这么多了。

浙公网安备 33010602011771号