const关键字用来定义一种常量,它的值不能被改变。对象在创建之后,其值不能改变,所以必须要在定义时就要初始化。1.基础用法
const int i = get_number(); const int j = 42; const int k; //用法错误,必须要初始化2.多文件共享const变量
编译器在编译过程中,将所有用到const常量的地方全部替换成对应的值,与define相似。 而这种替换,一般只在当前文件中有效。想要做到在多个文件中共享一个const常量,可以这样做---常量的声明和定义都添加extern关键字: extern const int i =512;//常量的定义,只能存在一个文件中 extern const int i;//常量的声明,可以放在多个文件中 而变量只需要声明加上extern,定义不需要添加extern,具体用法大家可以查阅一下extern的用法。3.const的引用---只读引用
把引用绑定在const的对象上,我们把这个引用称之为对常量的引用。const的作用是限制对对象的引用的功能,而这里就是限制引用只能读取对象的值,而不能进行修改。 const int i = 1024; const int &ci = i; //对常量的引用 ci = 42;//错误,只能读取,而不可修改 int &cj = i;//错误,非常量引用不能指向一个常量对象,这个很容易理解,常量对象是不能进行修改的,而如果非常量引用指向了常量对象,那就意味着能够通过它进行修改,这是不允许的一般来说,引用的类型必须与其所引用的对象的类型一致,也有例外---允许初始化常量引用时使用任意表达式作为初始值(非常量的对象,字面值,表达式): 1)int i = 22; const int &ci = i;//这样做是可以的,我们要注意的就是,不能通过ci去修改i的值,却可以通过其他手段修改i的值 2)double j = 2.2; const int &cj = j; //这样也是可以的,其实现的方法就是建立一个中间变量来实现: const int temp = j; const int &cj = temp; 我们看到其实它是将cj绑定到了一个中间变量上的,这样即使修改了j的值,cj引用读取的值也不会发生改变。 3)const int &k = 42; //这样也是可以的 除了int i = 2; const int &ci = i;这种引用开发中经常会用到,其他的感觉用处也不是很大,大家只需要记住,对于常量的引用是一种只读引用就可以了。
4.const与指针
const在指针这部分在面试过程中是经常会考的,大致就是区分常量指针和指针常量的区别---由于这两个词理解起来很麻烦,所以我一般不用这两个词。
1)指向常量的指针---const int *p;或者int const *p; const修饰的是int或者*p(*p是指针指向的值,而不是指针),说明指针指向的是常量(指针自己认为),而实际上它跟引用是相似的,这里不要求指针指向的必须是常量,也可以是变量,那么这个指针就是不能通过指针去修改指向对象的值,而可以通过其他手段来修改(变量的情况),同时我们也可以把指针指向其他的对象 int i = 42;const int j = 43; const int *p = &i; int const *q = &j; 2)指针是常量---int * const p; const修饰p(p是指针),意思很清楚,这个指针是常量,那就意味着指针必须初始化并且不可再指向其他的对象。 int i = 2; int * const p = &i;