C++中有关const的一点心得

C++中有关const的一点心得
水晶扇 QQ: 282974362

1 指向const的指针和const指针

  1. 指向const的指针
    指向const的指针是指无法通过此指针修改其指向的数据(有可能通过别的方法修改),指针本身可以改变。
    指向const的指针定义方式有三种: ①const type * p; ②type const * p; ③const type const * p。
    指向const的指针做加减整数得到的新指针仍然是指向const的指针。【可称为“自以为指向const的指针”】
  2. const指针
    const指针是指无法改变指针本身,但其指向的数据可被改变。
    const指针定义方式为:type * const p。
    const指针做加减整数得到的新指针不再是const指针,而是普通指针。

2 const变量的存储

  1. VC++6.0
    2.1 const变量被强制改变
    const变量被强制改变后,其地址对应的值会改变,但是const变量本身代表的值不变(这只是编译器的一个小小优化)(简单类型,int,char,bool优化;复杂类型float,double不会优化)。
    常变量本身分配内存,但是使用时用常数替换;对其取地址,获取到的是给const变量分配的地址(常变量本身并不使用这个地址)。如果把指向该地址的指针强制转化为非const的指针,然后改变该内存里面的值,则该内存值会改变,但是原来的常变量本身值不变。如下图:
    const变量被强制改变1
    const变量被强制改变2
    2.1 const数组被强制改变
    常量数组值被强制改变后,原来常数组值也会改变。(复杂类型的const变量也是)
    const数组被强制改变
  2. G++
    2.1 const变量被强制改变
    G++不但优化了简单类型,int,char,bool;还优化了复杂类型float,double。
    const变量被强制改变(gcc)
    2.2 const数组被强制改变(不允许)
    G++中,如果将常数数组指针强制转化为普通指针(使用const_cast),使用该指针仍然不能改变数组内的值。会报段错误。

const数组被强制改变(gcc)

3 函数const参数

3.1 普通形参与const形参
在函数的参数列表中,const形参与普通形参是等价的。如:
void fun(int t);
void fun(const int t);
上述两个函数申明被认为是申明同一个函数。
3.2 普通引用形参与const引用形参
① const引用参数与普通引用参数是不同的。
void fun(int& reft); // a
void fun(const int& reft); // b
上述两个函数声明是不同的函数声明。
② 如果传入的是非const变量或非const引用,则自然调用a函数
③ 如果传入的是const变量或const引用,则根据最佳匹配原则,会调用b函数
3.3 普通指针形参与const指针形参
与“普通引用形参与const引用形参”相同

4 类的const成员函数

1) const成员函数与非const成员函数是不同的重载:非const的对象会调用非const版本的重载;const对象会调用const版本(最佳匹配);
2) const成员函数返回(*this)时,返回的是const引用,这个引用不能用于继续调用非const的其他成员函数。
3) const成员函数只能调用其他const成员函数或static成员函数,不能调用普通成员函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值