C++中const用法小结

        const表示其所修饰的对象不可以被改变,例如常量,函数,指针等,下面总结一下常见的几条const用法:
        1 指针常量与常量指针:这两个概念很容易搞混淆,笔者每次用到这两个概念的时候都要重新查一下文档才放心,查看定义与实例的时候,很容易理解二者的意义与区别,时间一长,概念又模糊了。这里介绍一个简单的记法,这个方法<<Effective C++>>第三版中看到的:
        常量指针,即指向常量的指针,故名思议,指针指向的对象是常量,可以改变指针本身的值,不可以改变指针指向的对象的值,定义常量指针的时候,const关键字应出现在星号的左边,例如:

int a = 10;
int b = 20;
int const * p = &a;  //常量指针,const在星号左边
*p = 20;             //error 不能通过解引用来修改指针指向的对象的值
p = &b;              //ok 可以改变指针本身的值

        定义常量指针的时候,const既可以出现在类型的左边,也可以出现在类型的右边,例如下面两种写法是等价的:

const int * p1;     //const在int的左边
int const * p2;     //const在int的右边

        指针常量,即指针本身是常量,即指针本身的値不可以被改变,但指针指向的对象的值可以改变,定义指针常量的时候,const关键字出现在星号的右边,例如:

int a = 10;
int b = 20;
int * const p = &a;     //指针常量,const在星号右边
*p = 20;                //ok 指针指向的对象的值可以改变
p = &b;                 //error 指针本身的值不可以改变

        2 声明迭代器为const和const迭代器:声明迭代器为const就像声明指针为const一样,即声明一个T* const指针,表示这个迭代器本身的值不可以改变,不能再指向其它的东西,但其所指向的对象的值是可以改变的。例如:

const std::vector<int>::iterator iter = vec.begin()
iter++;          //error
*iter = 10;      //ok

         而如果希望迭代器所指向的东西不可以被改动,而迭代器本身可以变化即希望其效果像const T*指针,那么需要一个const迭代器,即const_iterator,例如:

std::vector<int>::const_iterator cIter = vec.begin();
cIter++;             //ok
*cIter = 10;         //error

        3 const成员函数:const成员函数在声明和定义时都要用const修饰,如果两个成员函数只是因为const属性不同,这两个函数可以重载,例如下面两个函数可以同时存在于一个类中:

string GetName() const;  //const成员函数
string GetName();        //non-const成员函数

        非const对象既可以调用const成员函数,也可以调用非const成员函数,如果存在上面这种重载的const成员函数和非const成员函数,非const对象会调用非const成员函数;const对象只可以调用const成员函数,因为调用非const成员函数,可能会对其值做修改。

转载于:https://my.oschina.net/u/2420118/blog/481200

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值