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

C++中const关键词总结

[来源] 达内    [编辑] 达内   [时间]2012-10-12

const, constant的缩写,想必大家在第一堂C/C++课程的时候,老师们都是这么解释的“const 就是常量的意思,可以避免减少程序中的魔数(magic number)”。其实,这是对const最大的误解,以至于多年来大家见到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修饰

资源下载