const用法大集合

来源:互联网 发布:手机常用的网络制式 编辑:程序博客网 时间:2024/06/16 07:55

C++中的const应用的很灵活,const也大大改善程序的健壮性,下面就const在C++中的各种用法,做一个总结
const的使用地方
1.定义常量
(1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的

 TYPE const ValueName = value;  const TYPE ValueName = value;

在定义一个变量时用了const,就是常量了,在之后不能改变其值。
有的时候需要使用const变量,他的初始值不是一个常量表达式,但又确实有必要在文件中共享,这种情况下我们不希望编译器为每一个文件分别生成独立的变量,相反的,我们希望这类const对象像其他(非常量)对象一样工作,也就是说,只要在一个文件中定义了const,而在其他的文件中声明并使用它。
解决的办法是:对于const变量不管是申明还是定义都加extern关键字,定义一次就可以了

extern const int bufSize = fcn()   //一个文件中extern const int bufSize //和上面定义的bufSize是同一个

注意:默认状态下,const对象仅在文件内有效
const对象在定义时必须初始化,因为const对象在创建后就不能更改它的值
2、指针使用CONST
(1)指针本身是常量不可变

       char* const p;   

这个用const来修饰p,说明指针本身定为常量,常量指针必须初始化,而且一旦初始化,则它的值(也就是存放在指针里的地址)就不再改变的了
(2)指针所指向的内容是常量不可变

      const char *p; 

(3)两者都不可变

         const char* const p; 

顶层const和底层const
顶层const表示指针本身是个常量
底层const表示指针所指的对象是一个常量

int i= 0int *const p1 = &i   //不能改变p1的值,是顶层constconst int ci = 42    //不能改变ci的值,是顶层constconst int *p2 = &ci   //能改变p2的值,是底层const

(4)还有其中区别方法,沿着*号划一条线:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
3.const修饰函数系列
1)const修饰函数参数
传递过来的参数在函数内不可以改变,与上面修饰变量时的性质一样

void testModifyConst(const int _x) {     _x=5;   ///编译出错}

2).const修饰成员函数
(1)const修饰的成员函数不能修改任何的成员变量(mutable修饰的变量除外)
(2)const成员函数不能调用非onst成员函数,因为非const成员函数可以会修改成员变量

#include <iostream>  using namespace std;  class Point{     public :     Point(int _x):x(_x){}     void testConstFunction(int _x) const{          ///错误,在const成员函数中,不能修改任何类成员变量        x=_x;         ///错误,const成员函数不能调用非onst成员函数,因为非const成员函数可以会修改成员变量         modify_x(_x);     }     void modify_x(int _x){         x=_x;              }     int x; };

3).const修饰函数返回值

(1)指针传递
如果返回const data,non-const pointer,返回值也必须赋给const data,non-const pointer。因为指针指向的数据是常量不能修改

  const int * mallocA(){  ///const data,non-const pointer      int *a=new int(2);      return a;  }  int main()  {      const int *a = mallocA();      ///int *b = mallocA();  ///编译错误     return 0; }
0 0
原创粉丝点击