C/C++ const 修饰符的作用

时间:2021-09-19 21:06:51

一.基本作用

1 const与define功能相似,具有定义常量功能。

const定义的常量具有数据类型,编译器会对数据类型安全进行检查,而宏定义则不会

2可以保护值和指针不会被修改,提升程序的健壮性。

       如:一个函数传入指针,不允许修改其指向的内容。

3.与define功能一样,方便的对参数进行修改调整。

4.const 定义的常量,在内存中只由一个,没有多个拷贝。

      如:const char *p=“sdasdasda”;

             const char *q=“sdasdasda”;

    p和q的值相同。

 二.函数中const的用法

  1 .const形参和实参

     当实参初始化形参时,会忽略顶层const。

    所以void fun(int i)

            {

       }与

void fun( const int i)

            {

       }由于顶层const 被忽略,在编译时,被认为是同一个函数。

三.在类中const的用法

1.首先,一个类的对象或对象指针/引用可以是const

2.其次,类中的成员变量和成员函数可以是const;

 值得注意的是,如果一个成员变量是const,那么该成员必须列表初始化。

3.const对象和对象指针/引用,只能调用const成员和成员函数。

4.一个类的拷贝构造函数其参数一般是const引用,参数必须是引用。

而const会有两个好处:

         一. 不加入const时,非const变量不能转换成const变量。

        二. const变量·

            既可以从const和非const左值复制构造,也可以从const和非const右值复制构造。


5.对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:   
const classA operator*(const classA& a1,const classA& a2);   
operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:   
classA a, b, c;   
(a * b) = c; // 对a*b的结果赋值   
操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。