• 练习2.30、2.31、2.32


    2.30:对于下面的这些语句,请说明对象被声明成了顶层const还是底层const?

    const int v2=0;  int v1=v2;

    int *p1=&v1,&r1=v1;

    const int *p2=&v2,*const p3=&i,&r2=v2;

    Ans:v2是顶层const对象,p2是底层const对象,p3是顶层const也是底层const,r2是常量引用是底层const对象

    2.31:假设已有上一个练习中所做的那些声明,则下面的哪些语句时合法的?请说明顶层const和底层const在每个例子中有何体现。

    r1=v2;  //合法,r1是一个普通的引用,v2是一个顶层const对象,拷贝过程中不影响。。

    p1=p2;  p2=p1;  //前者p2是底层const对象,而p1是普通指针,用底层const对象p2去修改普通指针p1,显然是不合法的。后者p2是底层const对象,不是顶层const对象,因而可以修改p2指针本身的值。

    p1=p3;  p2=p3;  //前者不合法,p3是顶层const对象也是底层const对象,而p1是普通指针,因此不合法。后者合法,p3是一个顶层const指针也是底层const指针,而p2是一个底层const,故合法。

     2.32:下面代码是否合法?如果非法,请设法将其修改正确。

    int null=0,*p=null;

    Ans:非法。应修改为:int null=0,*p=&null;或者可以改成:int null =0,*p=nullptr;

  • 相关阅读:
    POJ 2002 Squares
    POJ 1840 Eqs
    POJ 1759 Garland
    UVA 572 Oil Deposits
    POJ 3278 Catch That Cow
    POJ 2488 A Knight's Journey
    UVA 699 The Falling Leaves
    [Poi1999] 原始生物
    [bzoj3033] 太鼓达人
    [bzoj1123] BLO
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9365466.html
Copyright © 2020-2023  润新知