c++之浅谈const

  const是c++中威力强大的助手,可被施加于任何作用域内的对象,函数参数,函数返回类型.成员函数自身。

    一. const 作用于指针:

              当const出现在*号左边时(const 写在类型之前或者之后,意思都一样),代表的是指针所指物是常量:int age =  11;    const   int  *  a = &11;这种情况下,a自身是可以改变的,即可以给a重新赋值,使a 指向其他的对象,但是*a是不能改变的:*a += 1;     错误,a指向的对象是常量,不能改变。

                                                  int day = 7;  a = & day;   正确,可以重新改变a 的地址。

             当const出现在*号右边时, 代表的是指针自身是常量指针,所以不能给指针重新赋值:

                           int age = 11; 

                           int * const a = &11;

                            int day = 7;  a = & day;   错误,a为const指针,不能改变它的地址。

                           * a += 1;  正确,a 所指的对象为non-const对象,可以改变其值。

             当const 即出现在*号的左边又出现在右边时,代表的是此指针既是const指针,而且指向的对象时const对象:

                             

                           int age = 11; 

                           int * const a = &11;

                           int day = 7;  a = & day;   错误,a为const指针,不能改变它的地址。

                           * a += 1;  错误,a 指向的对象时const对象,不能改变其值。

            指向 const对象的指针和指向non-const对象的指针的赋值问题:

                       1.指向const对象的指针既可以接受const对象的地址,亦可以接受non-const对象的地址:

                           const int  a = 2;

                            int b = 3;

                            const int * point = &a; 正确,此时既不能通过*point 来改变a 的值,也不能通过a来改变其值。

                             point = &b;正确,不能通过*point来改变a的值,但能通过b来改变其值

                        2.指向non-const 对象的指针只能接受non-const 对象的地址:

                            const int  a = 2;

                            int b = 3;

                            int * point = &b;正确,此时对象的值既可以通过*point来改变,亦可以通过a来改变

                            point = &a;错误,假设能,那么由于指向non-const对象的指针可以修改对象的值与该对象是常量就形成矛盾。

二.const作用于迭代器:

                         迭代器与指针类似,分为迭代器自身为const迭代器,和迭代器所指向的东西是不能改变的。

三.const作用于常量,代表该常量是不能改变的。const作用于类,代表该类的成员变量是不能改变的!且const类对象.指针.引用,只能调用类的const成员函数,因为任何非const成员函数都有修改成员变量的企图。

四.const成员函数:

                   const作用于成员函数,代表该类的成员函数不能修改类中的任何变量,且在此const成员函数内不能调用该类的非const成员函数。

五.const作用于函数参数:

                   1.pass-by value to const:  (无意义,形参为const,即副本不变)

                   2.pass-by point to const   :指针所指向的对象是常量 (有意义)

                   3.pass-by reference to const (有意义)

            2和3参数传递效果和函数按值传递的效果是一样的,只是2和3不产生副本!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值