const,表示不可变的,用const关键字保存程序元素不变
const修饰变量
const int i=10;
const修饰变量i,使i变为常量,若修改i的值编译器会报错。
const修饰指针
1. 指向const变量的指针
const char *u;
char const *v;
const在*左边,在类型左边右边都可以,v和u都表示一个指针,指向const char类型变量的指针。
它可以用来使任何字符或数组不可变,但是它指向的值不能被改变。
3. const指针
int x=1;
int* const w=&x;
const在*右边,w是一个指针,是指向整型的常量的指针,它不能再指向别的变量,但指向的变量的值可以修改
4. 指向常量的常量指针
const int *const a;
指针a不能再指向别的常量,指向的值也不能被改变。
const修饰函数参数
1.值传递
传递一份参数的拷贝给函数,只会修改拷贝,无法修改原函数,所以不需要声明const
2.指针传递
指针传递会造成浅拷贝,拷贝一份指针给函数而不会拷贝一份原始对象,因此,给指针参数加上顶层const可以防止指针指向被篡改,加上底层指针防止指针指向对象被篡改。
3.引用传递
引用是对象一个别名,不需要拷贝对象,减小开销,给引用底层加上底层cosnt,减小开销,又可以防止修改底层引用对象。
const修饰成员函数
void Dispaly()const
{
cout <<_year <<"-"<< month<<"-"<<day<< endl;
}
const修饰的成员函数,实际修饰该成员函数隐藏的this指针,表明在该成员函数中不能对类的任何成员进行修改。
void Display(const Date* this)
{
cout <<_year <<"-"<< month<<"-"<<day<< endl;
}
注意
void Display()
void Display1()const
- const对象不能调用非const成员函数
int main()
{
const Date d1;
d1.Display1();//d1为const成员,不可修改
}
- 非const成员可以调用const成员函数
int main()
{
Date d1;
d1.Display();//d1没有要求,可改可不改
}
- const成员函数内不可调用其他非const成员函数
void Display1()//只读
{
Display();//可读可写
//该函数内可以修改成员,而Display1内不可修改,范围大于Display1(),不可调用
}
- 非const成员函数内可以调用const成员函数
void Display()//可读可写
{
Display();//只读
}