用来代替#define的const

             用来代替#define的const

    C++中提倡用const 来代替 #define.
       好处1 :
     const 进行类型安全检查
     好处2:
     const 是有类型的,比如  
const int          val = 0;

const double       val = 0;
 
  
 
  
  首先 在xxx.h文件中原来的
    #define MAX 100 ---->  const int MAX 100;
 
    说明:
      1 首先const默认是内部变量,只在本cpp文件中有效,不然一个xxx.h被多个cpp
文件引用后,肯定会重定义。由于const 是内部变量,所以在多个cpp文件中出现相同的定义完全没有问题。
      2 由于const表示的是常量,也就是值不会被改变,所以编译器就有可能对其做一些优化。 比如很简单,做常量折叠,不给其分配地址空间。
       例如 在xxx.h中定义的
const int MAX = 100;
       这个常量MAX 就很有可能不占内存空间。
       为什么是很有可能?因为如果有以下3中情况,则需要给const分配空间。
       1 const 常量被声明为 extern
       2 对const 常量取地址运算
       3 const 值未定
第一种 由于const被声明为extern 因此其他文件中的函数可能要使用到该常量,所以要给它分配空间。
第二种,取地址了嚒,没空间 哪里来的地址?
第三种,比如:
const int max = i; //i为前面某处定义的变量
此时也要给max分配空间
可以理解,如果 一个const 常量,即没有被取地址,又是本文件内有效,并且值从一开始就是确定的,而且它又是常量,不会被改变,也就没有必要给它分配空间了。于是便和#define变得差不多一摸一样了,除了它是有类型的。
 
 

你可能感兴趣的:(用来代替#define的const)