const 常量

  • const修饰的量是常量,常量的值不可修改。

  • 常量在定义的时候必须初始化。使用未初始化的常量事错误的。

    // 用变量给常量赋值
    int a = 3;
    const int b = a;
    
    // 用常量给变量赋值
    int a;
    const int b =7;
    a = b;
    

const 指针

  • 常量指针不允许通过自身来修改对象的值。

    const int *p;
    int i =9;
    p = &i;
    int *r =&i;
    *r =8; //ok
    *p =10; //error, *p为const
    
    int j =0;
    p = &j; //p可变
    
  • 指针常量,指针指向的地址不能被改变。

    int i=9;
    int * const p= &i;
    int j=8;
    p = &j; //error
    *p =10; //ok
    
  • 判定 const 修饰指针还是指针所指的内存技巧:沿着*号划一条线,const和谁在一边,那么谁就是const,即const限定的元素就是它。。另外,需要注意:对于const (char ) ; 因为`char `是一个整体,相当于一个类型(如 char),因此,这是限定指针是const。

    const char* p; //*p 为 const
    const (char *) p; // p 为const
    
    char * const p; //p 为 const
    (char *) const p; //p为const
    char const *p; // *p为const
    
    const char * const p; //p ,*p 均为const
    char const * const p; //p,*p 均为const
    

const 引用

  • 引用一旦与对象绑定,中途不可改变

  • const 引用,指向一个 const 的引用。不能通过 const 引用改变绑定对象的值。

    int i =12;
    const int& r =i;
    i =13; //ok
    r = 1; //error
    
  • 非const引用不能与const对象绑定。因为非const 引用可以修改绑定对象的值。

    const in a = 9;
    int & r = a; //error
    
  • 引用的类型必须与所引用的对象类型一致,但是有例外情况:在初始化常量引用时可以用任意的表达式作为初始值,只要表达式的结果能转换成引用的类型。

    int i =9;
    const int& r1 = i;    //ok
    const int& r2 = 28;    //ok
    const int& r3 = r1*2;    //ok
    int &r4 = 45;    //error,r4 b不是const引用
    
    double d = 3.2;
    const int& r = d; //ok,其实编译器进行了两步,1. const int temp =d; 2. const int &r = temp;
    

results matching ""

    No results matching ""