C++ const关键字作用与用法
const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。
const的作用:
1、可以定义const常量 const int Max = 100;
2、便于进行类型检查。const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,
而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误
  void f(const int i) { .........}
      //对传入的参数进行类型检查,不匹配进行提示
3、可以保护被修饰的东西。防止意外的修改,增强程序的健壮性。
  void f(const int i) { i=10;//error! }
      //如果在函数体内修改了i,编译器就会报错
4、可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变
5、为函数重载提供了一个参考。
  class A
  {
             ......
    void f(int i)       {......} //一个函数
    void f(int i) const {......} //上一个函数的重载
             ......
  };
6、可以节省空间,避免不必要的内存分配。const定义常量从汇编的角度来看,只是给出了对应的内存地址,
而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,
而#define定义的常量在内存中有若干个拷贝
  #define PI 3.14159         //常量宏
  const doulbe  Pi=3.14159;  //此时并未将Pi放入ROM中
                ......
  double i=Pi;   //此时为Pi分配内存,以后不再分配!
  double I=PI;  //编译期间进行宏替换,分配内存
  double j=Pi;  //没有内存分配
  double J=PI;  //再进行宏替换,又一次分配内存!
7、提高了效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,
这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
const修饰变量:
const [type] x 和 [type] const x形如:
const int _itemp;
int const _itemp;
const修饰的类型为int的变量_itemp是不可变的,表示常量。
const修饰指针:
const [type] * x或 [type] const * x形如:
const int * _ptemp;
int const * _ptemp;
两种写法不同,意义相同
表示_ptemp是一个int类型的指针, const 修饰 *_ptemp,*_ptemp表示_ptemp所指向的内容,即不能改变
指针指向的变量内容。
[type] * const x形如:
int * const _ptemp;
表示_ptemp时一个int类型的指针,const修饰_ptemp(指针本身),不能改变指针变量_ptemp本身的值,
即不能改变指针指向。
const [type] * const x形如:
const int * const _ptemp;
表示_ptemp是一个int类型的指针,第一个const修饰 *_ptemp,指针指向内容不可变,
第二个const修饰_ptemp,表示指针本身不可变,即指针指向不可变。
const修饰引用
const [type] &x 和 [type] const& x形如:
const int & _itemp;
int const& _itemp;
这两种情况写法不同,类似于const int x 和 int const x。引用和引用对象是一体的所以这两种写法的意义一样
const修饰引用,引用本身内容不可变,但引用的变量(或对象)可以改变.
[type] & const x形如:int & const _itemp;不存在此种形式。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号