const 应用概述 [C++Primer]

1.const 定义一个常量,常量在定义之后就不可以在修改,任何修改的尝试都会引起编译错误,所以在定义的时候必须初始化。

   const  int  nTemp = 9;

2.在全局作用域声明的const变量是定义该对象的文件的局部变量,只存在于那个文件中,不能被其他文件访问;

   通过指定const变量为extern,就可以在整个程序中访问const对象。

   file_1.cc

   extern  const  int  bufsize = 10;

   file_2.cc

   extern  const  int  bufsize;

   for(int index = 0; index <= bufsize; index++);

 3.非const变量默认为extern。

 4.const引用,指向const对象的引用;

    为了阻止const对象被修改,将普通的引用绑定到const对象是不合法的;

    const   int i = 42;int &r = i;不合法的。

5.const引用可以初始化为不同类型的对象或者右值,如:int i = 42; const int &r = 42;const int &r2 = 42 + i;

6.const用在成员函数的形参表之后,可以将成员函数声明为常量,const必须出现在声明和定义中,否则会出现编译错误;

    double avg_price()const;

 7.const重载

     成员函数是否为const,也可以形成重载。

      对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参。则这个时候无论加不加const对实参不会产生任何影响。但是在引用或指针传递函数调用中,因为传进去的是一个引用或指针,这样函数内部可以改变引用或指针所指向的变量,这时const 才是实实在在地保护了实参所指向的变量。因为在编译阶段编译器对调用函数的选择是根据实参进行的,所以,只有引用传递和指针传递可以用是否加const来重载。

8. const成员函数可以改变mutable成员   

 1 class  Screen{
 2 public :
 3    do_display(std::ostream& os) const;
 4 private:
 5     mutable size_t    access_ctr;
 6 //
 7 };
 8 Screen ::do_display(std::ostream& os) const
 9 {
10    size_t++;
11     access_ctr++;
12 }
原文地址:https://www.cnblogs.com/cy568searchx/p/2995121.html