【C++ const】
const 参考
1. 分类
常变量:  const 类型说明符 变量名
常引用:  const 类型说明符 &引用名
常对象:  类名 const 对象名
常成员函数: 类名::fun(形参) const
常数组:  类型说明符 const 数组名[大小]
常指针:  const 类型说明符* 指针名 ,类型说明符* const 指针名
const int a=5; 与 int const a=5;  等同
类名 const 对象名 与 const 类名 对象名 等同
2. 用法
1. 常量
2. 指针和常量
const指针修饰变量以下三种情况:
/* A:修饰指针指向的内容,则内容为不可变
 * B:修饰指针,则指针为不可变量
 * C:修饰指针和指针指向内容,均不可变量
*/
  // A
  int a = 8;
  int b = 3;
  const int* p = &a;
  p = &b;
  // B
  int* const p1 = &a;
  *p1 = 9;
  // C
  const int* const p2 = &a;
char *const cp;    //到char的const指针
char const *pc1;   //到const char的指针
const char *pc2; //到const char的指针(后两个声明是等同的)
右向左读的记忆方式:
cp is a const pointer to char
故pc不能指向别的字符串,但可以修改其指向的字符串的内容
pc2 is a pointer to const char
故*pc2的内容不可以改变,但pc2可以指向别的字符串
3. 用const修饰函数传入参数
void Fun( const A *in); //修饰指针型传入参数
void Fun(const A &in); //修饰引用型传入参数
4. 修饰函数返回值
可以阻止用户修改返回值。返回值也要相应的付给一个常量或常指针。
5. const 修饰成员函数
const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数;
const对象的成员是不能修改的,而通过指针维护的对象确实可以修改的;
const成员函数不可以修改对象的数据,不管对象是否具有const性质。编译时以是否修改成员数据为依据进行检查。
3. 展开来说
1. 常量与指针
const int *m1 = new int(10);
int* const m2 = new int(20);
只要知道:const只对它左边的东西起作用,唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用
···
2. 常量与引用
常量与引用的关系稍微简单一点。因为引用就是另一个变量的别名,它本身就是一个常量。也就是说不能再让一个引用成为另外一个变量的别名, 那么他们只剩下代表的内存区域是否可变
const int i = 10;
// 这里i已经被定义为常量,但是我们仍然可以通过另外的方式去修改它的值。
// 这说明把i定义为常量,实际上是防止通过i去修改所代表的内存。
int *pi = (int*) &i;
3.常量函数
  常量函数是C++对常量的一个扩展,它很好的确保了C++中类的封装性。
  在C++中,为了防止类的数据成员被非法访问,将类的成员函数分成了两类,一类是常量成员函数(也被称为观察着);另一类是非常量成员函数(也被成为变异者)。
  在一个函数的签名后面加上关键字const后该函数就成了常量函数。对于常量函数,最关键的不同是编译器不允许其修改类的数据成员。例如:
4. 常量返回值
4. 使用const的一些建议
- 要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;
- 要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题;
- 在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上;
- const在成员函数中的三种用法(参数、返回值、函数)要很好的使用;
- 不要轻易的将函数的返回值类型定为const;
- 除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号