C++细节之const

const的作用:(1)普通变量的保护;(2)地址空间的保护;(3)类初始变量的声明和保护;(4)类变量在函数中的保护。const的保护主要来自于编译器层面,和程序的运行没有关系。

const:1)对象一旦创建就不能改变,所以必须初始化。

            2)只在一个文件中定义const,在其他多个文件中声明并使用。

            3)常量引用:const int i=20;                                      int j=10;

                                   const int &r=i;// i,r值都不可变               const int &r=j;   //r的值不可变,可以通过改变j来改变r的值

                                   int &r=i;//错误,试图通过引用r修改I     int&r=j;    //普通引用

            4)指针常量&常量指针:const int* p  被指对象是const;p2c    int *const p 指针是常量  地址不变 对象可变 c2p

                                    double pi=3.14;const double *i=π               double *const j=π

                                    *i=10;   //错误 被指对象是const                       *j=10; //正确

                                     i=j;      //正确                                                    j=i;     //错误   指针为常量 不能改变地址

            5)顶层const&底层const:顶层常量可以表示任意的对象是常量,底层常量与指针和引用相关,顶层表示指针本身,底层表示对象。执行拷贝时,2个对象顶层通常没有影响,但是底层限制必须一致。

                 int i=0;     int *const p1=&i;    const int c=42;    const int *p2=&c;   const int *const p3=&p2;  const int &r=c;

                 i=c;  p2=p3;  // 正确;

                int *p=p3;     int&r=c;     //错误    底层不一致

                p2=p3;    p2=&i;              //正确

             6)const 成员函数:char get() const; 只需要在成员函数参数列表后加上关键字const

               int  error(intival) const { _cursor = ival; }     //错误   const成员函数不允许修改类的数据成员
               void setName(const string &s) const { *pName=s.str(); } 

               但是,如果据成员是指针,则const成员函数并不能保证不修改指针指向的对象

                     (1)const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;

                    (2)非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员;

                   (3)作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应心可能将该成员函数声明为const 成员函数。



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值