当前位置:编程学习 > C/C++ >>

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修饰

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,