zoukankan      html  css  js  c++  java
  • const放在函数前后的区别

    转载:const放在函数前后的区别

    一、const修饰指针

    int b = 500;

    1、const int * a = & b;

    2、int const * a = & b;

    3、int * const a = & b;

    4、const int * const a = & b;

    对于1和2

    const 放在*左侧,就是用来修饰指针所指向的变量,即指针指向的是常量。

    若a是仓库管理员,b是仓库。即仓库中的货物(*a)不允许改变。但是可修改指针指向或b的值来改变*a。

    对于3

    const放在*的右侧,表示管理的仓库不可改变,只能是那一个,但是仓库中的货物(*a)可以改变。同时定义时必须初始化。

    对于4

    表示指针本身和指向的内容均为常量。

    二、放在函数前后区别

    1、int GetY() const;

    2、const int * GetPosition();

    对于1

    该函数为只读函数,不允许修改其中的数据成员的值。

    对于2

    修饰的是返回值,表示返回的是指针所指向值是常量。

    三、深入理解const

         const对象只能调用const成员函数;const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误;在const函数中调用非const成员函数是语法错误。

      在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
    以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
    class Stack
    {
      public:
    void  Push(int elem);
    int  Pop(void);
    int GetCount(void)  const; // const成员函数
      private:
    int m_num;
    int m_data[100];
    };
    int Stack::GetCount(void)  const
    {
    ++ m_num; // 编译错误,企图修改数据成员m_num
    Pop(); // 编译错误,企图调用非const函数
    return m_num;
    }
    const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。

    --------------------- 本文来自 ranyongqing 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ranyongqing/article/details/25594795?utm_source=copy
    ————————————————
    版权声明:本文为CSDN博主「wangtingze123」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wangtingze123/article/details/82867173

  • 相关阅读:
    Design:目录
    前端框架:template
    Template-ArtTemplate:artTemplate.js
    开发框架:AdminLTE
    开发框架:目录
    杂项:短网址
    httpd
    Java实现洛谷 P1428 小鱼比可爱
    Java实现洛谷 P1428 小鱼比可爱
    java实现洛谷P1308统计单词数
  • 原文地址:https://www.cnblogs.com/MCSFX/p/12735508.html
Copyright © 2011-2022 走看看