const说明的类型是常类型,而且定义后不能被更改。
- const常量与
#define
宏定义常量的区别:
~~const常量具有类型,编译器可以进行安全检查;#define宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查
可以节省空间,避免不必要的内存分配
- const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像
#define
一样给出的是立即数。 - const定义的常量在程序运行过程中只有一份拷贝,而
#define
定义的常量在内存中有若干个拷贝。
1.对于指向常量的指针,不能通过指针来修改对象的值。
2.不能使用void*
指针保存const对象的地址,必须使用const void*
类型的指针保存const对象的地址。
3.允许把非const对象的地址赋值给const对象的指针,如果要修改指针所指向的对象值,必须通过其他方式修改,不能直接通过当前指针直接修改。
非const变量默认为extern变量,要使const变量能够在其他文件中访问,必须在文件中显式地指定它为extern。
类中使用const
在一个类中,任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改 数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或常对象,没有使用const关键字进行说明的成员函数不能用来操作常对象。
指针与const
与指针相关的const有四种:
const char * a; //指向const对象的指针或者说指向常量的指针。 char const * a; //同上 char * const a; //指向类型对象的const指针。或者说常指针、const指针。 const char * const a; //指向const对象的const指针。
小结:
如果const位于*
的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*
的右侧,const就是修饰指针本身,即指针本身是常量。