读书人

C++中const基本词总结

发布时间: 2012-09-27 11:11:17 作者: rapoo

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楼todd_leftcode9小时前
我个人比较同意二楼
2楼szw731596561昨天 21:28
学习了,谢谢,受益匪浅啊,有用
1楼zhy006昨天 09:14
(3) 函数的返回结果为constnn 表示返回的结果不可修改,返回结果只能赋值给const修饰的变量n这个是正确的么?n返回值为const更多是为了左值使用时的一些限定吧?请多指教~~

读书人网 >C++

热点推荐