关于const 限定符的一些概念

来源:互联网 发布:南京软件开发培训 编辑:程序博客网 时间:2024/06/11 02:16

1.定义const对象

      用一个变量来代表某一个常数的方法会出现一个问题,比如 int size=10; size 的值是可以被修改的,const限定符提供了一个解决办法,它把一个对象转换成一个常量 const int size=10; 定义size 为常量,并且初始化为10,并且不能被修改,否则会导致编译错误.这里需要注意的是因为常量在定义后就不能被修改,所以定义时必须初始化.

2.const 对象默认为文件的局部变量

      在全局作用域里面定义非const 变量时,它在整个程序中都可以访问。我们可以把一个非const变量定义在一个文件中,假设做了合适的声明,就可以在另外的文件中使用这个变量:

     //file_1.c

     int  size;  //definition

     //file_2.c

     extern int size;  //use size from file_1

     ++size;

     与其他变量不一样,除非特别说明,在全局作用域声明的const变量是定义在该对象的文件的局部变量,此变量只存在于那个文件,不能被其他文件所访问

3.指向const对象的指针

       如果指针指向一个const对象,那么不允许用指针来改变所指的const值,为保证这个特性,c++语言强制要求指向const对象的指针必须具有const特性:

       const double *cptr; 这里的cptr是一个指向double类型const对象的指针,const指定了cptr所指向的对象类型,而并非cptr本身,也就是说,cptr本身并不是const,在定义的时候不需要对它进行初始化,如果需要的话,允许给cptr重新赋值,使其指向另一个const对象,但不能通过cptr修改其所指对象的值

       把一个const对象的地址赋给一个普通的,非const对象的指针也会导致编译的错误

      const double pi=3.14;

      double *ptr=π  //  error:ptr is a plain pointer

      const double *cptr=π   // ok:cptr is a pointer to const

      允许把非const对象的地址赋给指向const对象的指针

      double pi=3.14;//pi is a double

      cptr=π    // ok ,but can't change pi through cptr;

      在程序中,指向const的指针常用作函数的形参。将形参定义为指向const的指针,以此确保传递给函数的实际对象在函数中不因为形参而被修改.

 4.const指针

     除了指向const对象的指针,c++还提供了const指针---本身的值不能修改:

     int size=10;

     int *const ptr=&size;// ptr is a constant pointer

     ptr是指向int 型对象的const指针,与其他const量一样,const指针的值不能被修改,这就意味着不能使ptr指向其他对象,任何企图给const指针赋值的行为都会导致编译错误。指针所指对象的值能否修改完全取决于该对象的类型。

5. 指向const对象的const指针

    既不能修改const指针的值,也不能修改const指针指向的const对象的值

   

原创粉丝点击