const的限定

    const对象一旦创建后,其值就不可以改变,所以const对象必须初始化。与非const的类型比较,主要区别在于const类型对象执行但是不改变其操作内容。

    在默认状态下,const只在文件内有效。在默认状况下,const定义的对象仅限定在文件类起作用,当多个文件中出现了同名的const时其实等同于在不同文件中分别定义了独立的变量。于是我们只在一个文件中定义const对象,而在其他文件中仅仅声明就可以。对于const对象不管是声明还是定义都加extern关键字,这样只需要定义一次就可以了。如下:

        //在file1.h文件里面定义i

        extern const int i=3;    //将i定义为常量3

      //在file2.h中引用i时只要声明就可以,避免重定义

        extern const int i;

         int a=i;   //这样就可以使用i了

const的引用被称为对常量的引用(reference to const),引用类型必须与其所引用的对象保持一致,但是在这里有两个例外,第一个例外是在初始化常量引用时允许用任意表达式作为初始值。允许为一个常量引用绑定非常量对象,字面值,甚至是一个表达式:

                          int i=42;

                          const int &r1=i;    //正确,此时r1与i绑定

                          const int &r2=42;  // 正确,此时绑定一个字面值42

                          const int &r3=r1*2;  //正确,r3是一个常量引用,绑定字面值84

                           int &r4=42;    //错误,非常量引用不可绑定字面值

 指向常量的指针不可以用于改变它所指的对象的值。要想存放指向常量的地址,必须使用指向常量的指针。

                          const int i=9;

                          int *p1=&i   //错误,不可以用一个普通指针指向一个常量

                          const int*p2=&i;  //正确,用常量指针指向常量

                           *p2=5;   //错误,常量指针不可以改变所指向位置的值

常量指针(const pointer)必须初始化,一旦初始化完成,它指向的位置(存放的地址)就不在改变。

                           int i=4;

                           int j=5;

                           int *const p=&i;   //p将一直指向i,p是一个常量指针

                           const int*p1=&j;  //p1是一个指向常量的指针,注意const的位置

           

                                                               

原文地址:https://www.cnblogs.com/td15980891505/p/5136638.html