zoukankan      html  css  js  c++  java
  • const 深悟理解

    了解const,我们通过一个故事来理解一下,甲某一天死期存储一笔钱(本金),到了死期时间过了,甲的本金没有发生变化,但他可以去任何一个银联银行进行取款(const int *p)。乙某一天借给了同学丙100元,而乙只能向同学丙要钱,钱数随同学手头资金还取(int * const  p)。

    const:是一种约束。

    1.当const修饰变量时:

    ①const int  *p:const修饰的是int型数据变量,故表示*p是一个常量,指针p所指向的数据无法更改。

    ②int * const p:const修饰的指针变量p,故表示变量地址是固定的,指针p所指向的数据可以更改。

    ③const int*  const p=int const * const p:表示指针地址和指针变量所指向的数据都是不可以更改的。

    2.当const修饰函数中的参数:void f(const int a);

    表示在函数f()中,整型变量a不能通过赋值进行更改。

    例外:当我们在学习智能指针时,被const修饰的对象作为参数进行修改其数据成员,我们可以采取两种方式:

    ①:((auto_ptr<_Ty>*)(&_Y))->_Owns=false来改变数据。(对对象取地址,强转成原对象类型+*)。

    ②:即将需对被const修饰的对象所为参数进行修改其数据成员,可以将其成员加关键字mutable修饰,则就是可以改变。

    auto_ptr(const auto_ptr<_Ty> &_Y)
        {

       _Owns=_Y._Owns;
                ((auto_ptr<_Ty>*)(&_Y))->_Owns=false;

       _Ptr=_Y._Ptr;
        }

    3.当const修饰函数:void f() const;

    表示一个不做修改数据功能的常成员函数。

  • 相关阅读:
    CodeForces Gym 100500A A. Poetry Challenge DFS
    CDOJ 486 Good Morning 傻逼题
    CDOJ 483 Data Structure Problem DFS
    CDOJ 482 Charitable Exchange bfs
    CDOJ 481 Apparent Magnitude 水题
    Codeforces Gym 100637G G. #TheDress 暴力
    Gym 100637F F. The Pool for Lucky Ones 暴力
    Codeforces Gym 100637B B. Lunch 找规律
    Codeforces Gym 100637A A. Nano alarm-clocks 前缀和
    TC SRM 663 div2 B AABB 逆推
  • 原文地址:https://www.cnblogs.com/single-dont/p/10420554.html
Copyright © 2011-2022 走看看