const与指针

const与指针

  • 指向常量的指针

指向常量的指针const type* ptr可指向常量、变量。ptr是一个指向const type类型的指针变量。
注:ptr可修改(指向其他地址)。

int val = 10;
const int tmp = 20;
const int *q = &val;
q = &tmp;	//合法
  • 常指针

常指针type *const ptr只能指向变量
注:ptr不可修改(不能指向其他地址)。

int val = 10, tmp = 20;
int *const q = &val;
//q = tmp;	//非法
  • 常对象不能被修改;
  • 不能把指向常对象的指针赋值给非常对象的指针;

考虑以下类:

class class_const
{
private:
    /* data */
    int val = 10;
public:
    class_const(const int _val);
    ~class_const();
    int get_val() const;
    void set_val(const int _val);
    void modify_val(const int _val) const;
};

class_const::class_const(const int _val):val(_val)
{}

class_const::~class_const()
{}

int class_const::get_val() const
{
    return val;
}

void class_const::set_val(const int _val)
{
    val = _val;
}
  • 在类中,const对象不能调用非const成员函数;
const class_const ccc(10);
printf("%d\n", ccc.get_val());
// ccc.set_val(20);	非法

class_const cc(10);
printf("%d\n", cc.get_val());
cc.set_val(20);		//合法
printf("%d\n", cc.get_val());
  • const成员函数不能改变数据成员;
  • const成员函数不能调用非const成员函数;
void class_const::modify_val(const int _val) const
{
    // val = _val;		非法
    // 如何改?强转
    ((class_const *)this)->val = _val;
    // 或将val用mutable修饰,类中定义为:mutable int val = 10;
    // set_val(_val);	非法
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值