C++中const关键词总结

下午在调程序时,遇到 error: passing ‘$class_name‘ as ‘this’ argument of ‘$class_function‘ discards qualifiers的编译的错误,

错误的意思是 this指针在作为参数传入class_function时限定符被取消了

google一下,是这个函数需要用const修饰,而我漏了,因而报了这个编译错误。


顺便将const关键词在C++中的使用总结一下。


const, constant的缩写,想必大家在第一堂C/C++课程的时候,老师们都是这么解释的“const 就是常量的意思,可以避免减少程序中的魔数(magic number)”。其实,这是对const最大的误解,以至于多年来大家见到const就想到在文件前几行的定义的常变量。


const在C++中的使用归纳为

     const对变量的修饰

     cosnt对指针的修饰

     const对函数的修饰


一. const对变量的修饰

      const int MAX_SIZE = 1024;

     这是最常见的用法,大家都没问题, const在定义的时候需要初始化。

     有两点需要注意一下:

     a) const变量默认是局部变量,如果需要全局访问,需要显示地extern

     b) const int MAX_SIZE = 1024 与 #define MAX_SIZE1024 貌似做了相同的事情,但是是完全不同的两个同意。

         #define作为宏定义是完全文本替换,而const MAX_SIZE是作为一个变量整体的。

          下面这段代码可以说得更清楚:

              const int MAX_SIZE = 1 << 10;//    #define MAX_SIZE 1<<10

               cout << MAX_SIZE << std;


二. const对指针的修饰

     const int * a = &b;           (1)

     int const * a = &b;           (2)

     int * const a = &b;           (3)

     const int * const a = &b;  (4)

     (1)(2)的含义是相同的,表示指针所指的内存空间不可修改. *a = XXX;是非法的

     (3)表示指针不可修改,a++是非法的;

     (4)表示指针和指针内容都不可修改

     

三. const对函数的修饰

       void fun(const int &r) (1) 与int const相同

       void fun() const          (2)

       const int fun()             (3)

     (1)  函数的参数为const,表示函数不可修改参数的值

     (2)  函数加const后缀, 此时的函数为自定义结构(struct,class)的成员函数,表示该函数成员不可修改class的成员变量

     (3)  函数的返回结果为const

            表示返回的结果不可修改,返回结果只能赋值给const修饰的变量


 

几点经验:

1)对const变量采用统一的编码风格能减少一些不必要的错误

2)给函数传参时,尽量使用带const的引用方式

3)返回结果迫不得已才使用const修饰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值