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++ ,