变量定义与const变量定义
一般变量
1)一个整型数 int a
2)一个指向整型数的指针 int *a
3)一个指向指针的指针,它指向的指针是一个整型数int **a
4)一个有10个整型数的数组 int a[10]
5)一个有10个指针的数组,该指针指向一个整型数 int *a[10]
6)一个指向有10个整型数数组的指针 int (*a)[10]
7)一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int (*a) (int)
8)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int (*a[10]) (int)
const变量
- 便于进行类型检查(针对宏常量而来的)
- 可以保护被修饰的东西(针对函数参数而来的)
- 可以很方便地进行参数的调整和修改(针对修改只需改值,类似宏变量)
- 为函数重载提供一个参考(函数返回值静态)
- 可以节省空间,避免不要的内存分配(针对#define而来)
- 提高效率(保存在符号表中而非分配存储空间)
1)const int a a是一个**常整型数**
2)int const a a是一个**常整型数**
3)const int \*a a是一个指向**常整型数**的指针
4)int const \*a a是一个指向**常整型数**的指针
5)int * const a a是一个指向整型数的**常量指针**
6)int const * a const a是一个指向**常整型数**的**常指针**
7)const int * const a a是一个指向**常整型数**的**常指针**
8)指针本身是常量不可变 (char*) const p 或 const (char *) p
9)指针所指向的内容是常量不可变 const (char) *p 或 (char) const *p
10)指针和内容均不可变 const char * const p
const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
const位于*的右侧,则const就是修饰指针本身,即指针本身是常量。
函数中使用const
1)修饰参数
- 传递归来的参数在函数内不可改变 void fun(const int var)
- 参数指针所指内容为常量不可改变 void fun(const char* var)
- 参数指针本身为常量不可改变 void fun(char * const var)
- 参数为引用,增加效率同时防止修改
- 引入参数在函数内不可以改变 void fun(const Class& var)
- 引入参数在函数内为常量不可改变void fun(const type& var)
2)const修饰函数返回值
- const修饰函数返回值,意义不太。
- 无意义函数(原因返回本身赋值,但值又不能边,故无意义) const int fun()
- 函数看做指针,指针内容不可变 const int *fun()
- 函数看做指针,指针本身不可变 int * const fun()
3)与类相关的const
- 修饰成员变量,则成员变量不能被修改
- 修饰成员函数,表示该成员函数不能修改成员变量,也不能调用任何非const成员函数
- 修饰类对象,表示该对象为常量对象,其中的任何成员不能被改变。对于兑现指针的对象引用也一样。此外,const修饰的对象的任何非const成员函数都不能被调用。
将const类型变量转换为非const类型的方法是使用const_cast进行转换。转换具体方法如下:const_cast