const修饰指针总结

char str[] = "test";

char *p = str; //非常量指针,指向非常量

const char * p = str; //非常量指针,指向常量

char * const p = str; //常量指针,指向非常量

const char * const p = str; //常量指针,指向常量

const出现在星号左边,表示被指物为常量,const出现在星号右边,表示指针本身为常量指针,总结成一句话:

左定值,右定位

迭代器的底层实现是指针,当const用于修饰迭代器的时候和修饰指针类似:

std::vector<int>::iterator it = vec.begin(); //非常量指针,指向非常量

std::vector<int>::const_iterator it = vec.begin(); //非常量指针,指向常量

const std::vector<int>::iterator it = vec.begin(); //常量指针,指向非常量

const std::vector<int>::const_iterator it = vec.begin(); //常量指针,指向常量

const类成员函数重载:

class A {
public:
    ...
    const char& operator[](std::size_t pos) const; //const型类成员函数
    char& operator[](std::size_t pos); //非const型成员函数
}

以下是两种调用场景:

A obj;

obj[10] = 10; //正确,调用非const型成员函数,可以被改动

const A obj;

obj[10] = 20; //错误,调用const型成员函数,不可以被改动

 还有一点要特别注意:返回类型必须是引用,如果直接返回内置类型,那么企图更改成员函数的返回值本身就是错误的做法,因为返回值是临时变量,返回后就会被释放!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值