首页 > 代码库 > C++ 中的const关键字

C++ 中的const关键字

            为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下:
           常变量:  const Type 变量名 或  Type const 变量名 //两者等同, 如: const int a=5; 与 int const a=5; 等同
           常引用:  const Type &引用名
            常对象:  Type const 对象名
            常成员函数:  类名::fun(形参) const
           常数组:  Type const 数组名[大小]    
           常指针:  const Type* 指针名 ,Type* const 指针名

首先提示的是:在常变量(const 类型说明符 变量名)、常引用(const 类型说明符 &引用名)、常对象(类名 const 对象名)、 常数组(类型说明符 const 数组名[大小]), const” 与 “类型说明符”或“类名”(其实类名是一种自定义的类型说明符) 的位置可以互换。如:

一、Const作用

   如下表所示:


二、Const的用法

  常变量:  const 类型说明符 变量名
  常引用:  const 类型说明符 &引用名
  常对象:  类名 const 对象名
  常成员函数:  类名::fun(形参) const
  常数组:  类型说明符 const 数组名[大小]    
  常指针:  const 类型说明符* 指针名 ,类型说明符* const 指针名 

2.1、常量用法

         const Type varibale = value or Type const variable = value;  在C++中常用来替换#define,一个原因是在编译器处理源码是被预处理器移走了,发生错误时很调试;第二个原因是每使用一次都会重新申请内存,增加代码码,而const则只一份内存空间。

2.2、使用CONST
(1)指针本身是常量不可变
     (char*) const pContent; 
     const (char*) pContent; 

(2)指针所指向的内容是常量不可变
     const (char) *pContent; 
     (char) const *pContent; 

(3)两者都不可变
      const char* const pContent; 
(4)还有其中区别方法,沿着*号划一条线:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

3、函数中使用CONST

(1)const修饰函数参数
a.传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)

void function(const int Var);

b.参数指针所指内容为常量不可变

void function(const char* Var);

c.参数指针本身为常量不可变(也无意义,因为char* Var也是形参)

void function(char* const Var);

d.参数为引用,为了增加效率同时防止修改。修饰引用参数时:

void function(const Class& Var); //引用参数在函数内不可以改变

void function(const TYPE& Var); //引用参数在函数内为常量不可变

(2)const 修饰函数返回值
   可以阻止用户修改返回值。返回值也要相应的付给一个常量或常指针。

4、const修饰成员函数

const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数;
const对象的成员是不能修改的,而通过指针维护的对象确实可以修改的;
const成员函数不可以修改对象的数据不管对象是否具有const性质。编译时以是否修改成员数据为依据进行检查。

C++ 中的const关键字