被const 修饰的对象只具有可读性从而得到强制的保护,可以防止它被意外的改动。所以:“Use const whenever you need ”。它可以用来修饰常数量,变量(包括指针变量和引用变量)和函数
1. Const 定义常数量
const DataType VaribleName =VaribleValue;// 定义的常数量
以Const 修饰的常量值,具有不可变性。并且C++ 的编译器通常不为const 常量分配储存空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储于读内存的操作,使得它的效率也很高。
2 .Const 用于指针
Const 用于指针可分为3 种情况:
// 指向常量的非常量指针,指针var 可变,指针所指向的值*var 不可变
int const *var;
// 指向非常量的常量指针,指针var 不可变,指针所指向的值*var 可变
int *const var;
// 指向常量的常量指针,指针var 和指针所指向的值*var 也不可变
Int *const var;
解读:
Const 是一个左结合的类型修饰符,它与其左侧的类型修饰符 合为一个类型修饰符,所以,int const 限定*var 而不限定var ,而int *const 限定的是var 而不是*var 。
3.const 修饰函数的参数
A .如过输入的参数采用值参数,由于函数将自动产生临时的变狼用语复制该参数,该输入的参数本来就无需保护,所以不必加const 修饰。
// 输入参数为值参数,不加const
void display(vector<int > ivec)
{
}
B .如果输入参数采用的指针参数,那么加const 修饰可以防止意外地改动该指针参数,起到保护的作用。
// 出入参数为指针参数,加const 防止被意外修改
Void display(const vactor<int> *ivec)
{
}
C .如果输入参数采用引用参数,那么加const 修饰可以防止意外地改动该引用参数,起到保护作用。
// 输入参数为引用参数,加const 防止被意外修改
Void display (const vector<int> &ivec)
{
}
4.const 修饰函数的返回值
A .如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。
B .如果给以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,并且该返回值只能赋给加const 修饰的同类型指针
C .如果给以“引用传递”方式的函数返回值加const 修饰,那么该返回值的内容不能被修改。
5.const 修饰成员函数
Cosnt 用于修饰类中的成员函数,表示这个成员函数不会改变类的状态(即类的私有数据)
Class ClassName
{
Public:
Int Fun() cosnt;
//const 成员函数,表明该函数不会修改类的状态
// 类声明的其他部分
} ;