一、函数实参的保护
函数的形参如果用const修饰,在函数体中该形参为只读变量,不能修改。
 C++中大量系统函数的形参均用const进行修饰,如:
int atoi(const char * str);//将数字串转换成整数
char * strcpy(char * to,const char * from);//保护源串from
只读形参用const修饰,一方面保护实参,避免错误,使程序健壮,另一方面增强程序可读性。
二、常对象
- 常对象不能调用任何类的非常成员函数,不能被修改。
- 只有常成员函数可以访问类的常对象,但也不能修改常对象;
- const对象不能被赋值,必须在定义时由构造函数初始化;
- 常对象只能访问常成员函数;
 定义:
三、常数据成员
常数据成员的定义与一般常变量的定义方式相同,只是他的定义必须在类体中。
 必须进行初始化,通过构造函数的初始化列表进行,不能被修改。
#include<iostream>
using namespace std;
class A
{
    private:
        const int& r;//常引用数据成员
        const int a;//常数据成员
        static const int b;//静态常数据成员;类内声明,类外定义
    public:
    //常数据成员只能通过初始化列表获得初值
        A(int i):a(i),r(a)
        {
            cout<<"constructor"<<endl;
        }
        void display()
        {
            cout<<a<<","<<b<<","<<r<<endl;
        }
};
const int A::b=3;
int main()
{
    A a1(1);
    a1.display();
    A a2(2);
    a2.display();
    return 0;
}
四、常成员函数
用于访问类的常对象的函数为常成员函数,也可以访问一般对象,定义格式:
- 常成员函数的实现也要带有const关键字
- 不能更新对象的数据成员










