常量的两种表示法
const int a=12;//a为常量 无法改变a的值
int const a=12;//a为常量 无法改变a的值
const int a; a=12//不合法.常量必须在声明时就给出值 后续无法再赋值
常量指针与指针常量
取决于const的位置 const只有在*后面才是控制指针 其余都是控制的变量
nt a=10,b=99;
const int*p=&a;//指针常量 无法用指针改数据值(但可以直接改动数据本身)
//即*p=111不合法 a=233还是可以用
int const *p=&a;//还是指针常量 const这两个位置都是一样的
int *const p=&a;//常量指针 指针只能指向初始时数据 即p=&b不合法
const在class中作用
class MyClass {
private:
const int a=23 ;//常量 可以在声明时赋值
public:
MyClass(int aa):a(aa)//还可以在初始化列表赋值
{}
Myclass(int aa){a=aa;}//不合法 无法这样对类常量赋值
void func()const{ //常成员函数 不能在其中改变成员的值
//也不能调用其他非const成员函数因为其他非const
//成员函数可能会修改了成员数据
}
};
const修饰类对象/对象指针/对象引用时无法修改任何成员变量,也无法调用任何非const成员函数
const在函数的参数中应用
const在修饰函数的参数时,与修饰一个变量的作用都是一样的,最常用方法如下
void function(const Class&var);//引用传递参数,参数无法修改
void function(Class const &var);//引用传递参数,参数无法修改
引用传递参数是直接使用的参数地址,省去了值传递参数时先拷贝一个副本再传递的步骤,节省了时间和空间 const修饰引用参数就可以避免参数传递后被函数内部修改
const修饰函数返回值
不太常用,返回值有太多限定了。因为const修饰类对象/对象指针/对象引用时无法修改任何成员变量,也无法调用任何非const成员函数
const int *func();//调用时 const int *val=func();
int *const func2();//调用 int *const val=func2();