zoukankan      html  css  js  c++  java
  • const限定符

    const能对变量加以限定,使其值不可修改。如:

    const int inf = 0x3f3f3f3f;

    任何试图修改变量inf的值的操作都将引起编译错误。

    因为 const 对象一旦创建后就不能修改,所以const对象必须初始化。

    const的引用:

    可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用。与普通引用不同的是,对常量的引用不能用作修改其对象的值。

    如:

    const int x = 0;

    const int &p = x;

    任何尝试修改p的值的操作都将引发编译错误。虽然不能直接修改const int &变量的值,不过在某些情况下可以间接修改const int &变量的值。

    如:

    对const的引用可以引用一个非const的对象,可以通过改变非const对象的值来改变const的引用的值。

    1 int x = 0;
    2 
    3 const int &p = x;
    4 
    5 x += 1;
    6 
    7 cout << p << " " << x << endl;//输出1 1

    因为x不是const变量,其值可以被修改,而p是x的引用,修改x的值即修改了p的值。

    const的引用可以可以初始化为一个字面常量,如:

    const int &p = 0;

    指针和const:

    与引用一样,也可以令指针指向常量或非常量。类似于常量引用,指向常量的指针不能用于改变其所指对象的。想要存放常量对象的地址只能用对应的常量指针。而常量指针可以指向对应的非常量对象,这点是和常量引用一样的。

    1 const int cnt1 = 0;
    2 
    3 int cnt2 = 1;
    4 
    5 const int p1 = &cnt1;
    6 
    7 const int p2 = &cnt2;

    指向const对象的指针:

    const int cnt = 1;

    const int *p = &cnt;

    上述语句声明的是一个指向常量int变量的指针。所谓指向常量的指针仅仅要求不能通过改变指针来改变对象的值,而没有规定该对象的值不能通过其它途径改变。因为指针p本身并不是一个常量,因此可以令p指向另外一个对象。

    即:

     1 const int cnt = 1;
     2 
     3 const int *p = &cnt;
     4 
     5 *p += 1;
     6 
     7 //是非法的
     8 
     9 const int cnt = 1;
    10 
    11 const int x = 0;
    12 
    13 const int *p = &cnt;
    14 
    15 p = &x;
    16 
    17 //是合法的

    const 指针:

    int cnt = 0;

    int *const p = &cnt;

    通过从右往左解读p的声明语句可以知道,首先p是一个const变量,然后是一个指向int性的指针。因此与上面的p不能改变对象的值但可以指向另外一个对象相反,这里的p可以改变其所指的对象的值,但p本身的值不能改变,即不能指向其他的对象。

    即:

     1 int cnt = 0;
     2 
     3 int x = 1;
     4 
     5 int *const p = &cnt;
     6 
     7 p = &x;
     8 
     9 //是不合法的
    10 
    11 int cnt = 0;
    12 
    13 int *const p = &cnt;
    14 
    15 *p += 1;
    16 
    17 //是合法的

    指向常量的常量指针:

    const int cnt = 1;

    const int *const p = &cnt;

    上述语句声明的是一个指向常量的常量指针。即不能通过改变p来改变p所指的对象的值,也不能改变p的值(p不能指向其它对象)。

    顶层 const 和底层 const :

    顶层const表示指针本身是一个常量,底层const表示指针所指的对象是一个常量。顶层const和底层const是相互独立的。

    更一般的,顶层const可以表示任意对象本身是一个常量,这一点对任何数据类型都适用,如算术类型,类,指针等。底层const则与指针和引用等符合类型的基本类型部分有关。比较特殊的是指针类型既可以是顶层const也可以是底层const,这一点和其他类型区别明显。

  • 相关阅读:
    pycharm的list的应用
    pycharm的list中copy的应用
    pycharm的list中clear的应用
    pycharm的list中append的应用
    crontab 管理指定用户的定时任务
    vsftp 搭建及虚拟账号配置
    MySQL 主从配置
    Ant 学习及常用任务
    ansible 小试
    微信H5页面分享
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/7896501.html
Copyright © 2011-2022 走看看