规则1:尽量用const ,enum ,inline ,而不要使用define
说明1:尽量用编译器而不是预处理器,因为预处理指令不是C++语言的一部分,不能直接对它们进行编译和链接。
注:C/C++提供的预处理功能主要有文件包含、宏替换、条件编译等
说明2:#define PI 3.1415926
编译器永远不会看不到PI这个符号名,因为预处理器会先于编译器处理PI,PI不会加入到符号列表中。如果涉及到这个常量的代码在编译时期报错,会令人很费解,因为报错信息指向的是3.1415926,而不是PI。
解决方案是使用const,const double Pi = 3.1415926;//宏命名采用全大写方式
说明3:const 两种特殊应用场合,一种是定义常量指针时,一种是作为类专属常量时
第一种:因为常量指针通常定义在头文件中,以备调用。所以一般需要使用const两次,如:const int const *pInt = nullptr;
第二种:类专属成员时,封装在类内,为了确保只有一个备份,会与static 关键字一起使用。
class Test
{
private:
static const int Num = 100;//常量声明,static const int 同时修饰变量时可以省略定义式,否则需要在cpp文件中定义,不在头文件定义是因为头文件可能会被多个地方保含
int arrar[Num ];
};
说明4:const 与define 区别之一
define 不具有封装特性,因其具有全局特性,除非遇到#undef。private #define 达不到效果。const 可以被封装而属于某个类专属。
说明5:有些老的编译器不支持static const int Num = 100;这样在编译期间就没办法知道数组的大小了,而编译器坚持需要在编译期间知道数组大小,此时可以使用enum代替const.
class Test
{
private:
enum {Num = 100};
int arrar[Num ];
};
注:enum 某些时候更像#define,如&操作符对const有效,而对宏和枚举非法。如果你不想你的常量被一个指针或引用指向,可以使用enum实现这个约束。
说明6:使用inline 函数代替形似函数的宏
规则2:尽量使用 <iostream>,而不是<stdio.h>
说明1:scanf以及printf 类型安全及可扩展性差,这也是C++较之C语言的优势
说明2:<< 和>>可以通过重载操作符增强功能,如支持链式编程
说明3:<iostream>是C++语言设计之初时为了区分C语言而故意去掉了后缀.h
说明4:<iostream>库中的类有构造析构函数,C库明显没有
规则3:尽量使用new delete,而不是malloc free
说明1:malloc 与free容易出问题在于太简单,他们不认识构造函数和析构函数,即初始化工作和清理工作。
说明2:free 在回收内存空间时,不能回收数组中的对象的内存空间,只会回收数组本身的内存空间,而delete可以
说明3:关键字new delete 或者malloc free 函数需要成对出现
说明4:不要混合使用它们
1082

被折叠的 条评论
为什么被折叠?



