define,const, enum,inline区别用法

define
没有类型,不能指明一组数据之间具有关联性,
有参宏的时候,逻辑不符合计算逻辑    容易产生误解
宏的结尾不用分号
宏的作用域是从定义位置开始,到文件结束,如果要终止宏定义的作用域,则可以用#undef 宏名称
#define PI 3.14
.......
#undef PI
 
const
const对象一旦创建后就不得在改变,所以const对象必须初始化
在不改变const对象的操作中还有一种是初始化,如果利用一个对象去初始化另一个对象,则他们是不是const都无关紧要
int i = 42;
const int j = i;
int k = j;           以上均正确
另外,在默认状态下,const对象仅在文件内有效,当多个文件中出现了同名的const变量,其实等同于在不同文件中分别定义了独立的变量
 
const int ci=1024;
const int & r1 = ci;        //这里是正确的,因为引用及其对应的对象都是常量
r1 = 50;                         //这里是错误的 r1是常量的引用
int & r2 =ci;                   //错误,因为试图让一个非常量引用指向了一个常量对象
总结:因为不允许直接为ci赋值,当然也就不能通过引用去改变ci 因此对r2的初始化时错误的,假设合法,则可以通过r2去改变它来改变对象的值,这显然是不对的
    用什么类型创建。用什么类型去保存
 
const int *p=&a        //不用通过指针修改它所指向的位置的值
int const *p =&a       //同上
int * const p              //不能修改指针指向的位置    可以修改值
总结:const 在 * 左边,即不能修改 它指向位置的值 (*p就是指)加上const
           const 在 * 右边    即不能修改它指向的位置,因为const 在p左边 p是地址变量
 
enum
写法注意:
  1. enum DIR
  2. {
  3. up,
  4. down,
  5. left,
  6. right //最后一个不用写逗号
  7. };//不要忘记分号
默认从0开始 0-3
 
inline函数
 
  1. #define f(x) x*x
  2. inline int fun(int x)
  3. {
  4. return x*x;
  5. }
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8. printf("%d\n", f(3 + 5));
  9. printf("%d\n", fun(3 + 5));//不会造成歧义,先把参数算出来,再参与计算。
  10. return 0;
  11. }
内联函数会对参数进行检测,不会造成歧义
内联函数会节省空间消耗 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2018-11-20 10:44  峰中追风  阅读(306)  评论(0编辑  收藏  举报

___________________________________________________________________________________________没有白跑的路