const 有什么作用呢?
经常看到有些函数的参数会写上const,特别是一些字符指针,例如
char * strcpy( char *strDestination, const char *strSource );
为什么要用这个const呢?
const关键字至少有下列n个作用:
(1)常引用,那么它引用的对象不能被更新。如果用常引用做形参,便不会意外的发生对实参的更改。const int &n;
(2)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;const int a;或int const a;
(3)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const。
A const int* a; 或int const *a;//*a是const,但指针a可变
B const* int a;或int * const a;//a是const,但*a可变
C (const int* const a;等价于int * const a const;)或int const* const a;//a和*a都是const,常量和指针的值都不能改变
(4)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;格式:int fun(const int a,....)传递引用参数:int fun(const int &a,....)
(5)对于类的数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化。
(6)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;格式:int fun(<参数表>)const;
(7)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。格式:const classA operator*(const classA& a1,const classA& a2);operator*的返回结果必须是一个const对象。
(8)常对象,它的数据成员值在整个生存期间不能被改变。也就是常对象必须进行初始化,而且不能被更新。格式:<类名>const<对象名>;或const<类名><对象名>;