zoukankan      html  css  js  c++  java
  • C++ 中 const 使用

    如果你一看见C++中const就脱口而出:“常量!”那只能说明你对c++不甚了解。或者说你太2了.

    const得一些使用方法与场景如下:

    1:const修饰普通变量,全局变量,静态变量

    1 const int iTmp = 1;
    2 int const iTmpEx = 2;

    变量保持其原有属性,只是多了一个const,只读属性。

    这里,const到底是紧贴变量名还是类型说明符号(int)都无关紧要。在修饰指针时候得不同在后面会详细说明.

    2:const修饰指针

    const 修饰指针有三种情况 

     //A: 指针指向内容不能修改,指针本身可以修改。
     char chBuffer[] = "test";
     const char *pName = chBuffer;
     pName++;
     cout<<pName<<endl();
     //*pName = 'c'; 非法,指针指向的内容不能被修改
     //B: 指针指向内容能修改,指针本身不可以修改。
     char chBuffer[] = "test";
     char *  const pName = chBuffer;
     //pName++; 非法,指针本身不能被修改
    *pName = 'c'; //内容可以被修改
     cout<<pName<<endl();
    
     //C: 指针指向内容不能修改,指针本身不可以修改。
     char chBuffer[] = "test";
     const char *  const pName = chBuffer;
     //pName++; 非法,指针本身不能被修改
    //*pName = 'c'; //非法 内容不可以被修改
     cout<<pName<<endl();

    写法,比如:const char *pTmp =chBuffer;

    等同于 char const *pTmp = chBuffer;

    另外

    char* const pTmp = chBuffer;

    其实,只要看const离哪个近些。 const离pTmp最近,说明它是在修饰指针变量pTmp,表示pTmp不能改变,即不能做pTmp++这种修改pTmp指针的操作。

    而 const char* const pTmp = chBuffer;则表示了指针和它指向的内容你都不能做修改。

    3:const修饰函数参数

    void Test(const int iAge)//函数体中,确保iAge不被修改。
    void Test(const char *pName)//函数体中,确保pName指向的内容不被修改。
    void Test(char* const  pName)//函数体中,确保pName不被修改。
    void Test(const char* const  pName)//函数体中,确保pName和pName指向的内容不被修改。
    void Test(const ClassTest &obj);// 这种情况使用非常多,这样可以避免调用ClassTest的构造函数,直接传递类对象的地址。
     

    4:const修饰函数返回值

    const 修饰返回值的用法比较少见,有种用法,比如

    const char* Test();

    那么接受它返回内容的变量也要写成const char *pRes;

    5:const修饰类成员变量

    修饰类成员变量时候,初始化需要放到类初始化列表种进行初始化

    class CTest{
    
    public:
       int m_iAge;
    }
    
    CTest::CTest:m_iAge(99){
    }

    6. const修饰成员函数

    class CTest{
    
    public: 
       void Show()const;
    private:
       int m_iAge;
    }
    
    void CTest:: Show()const{
     cout<<m_iAge;
    // m_iAge++; 不能修改
    }

    对变量的只读访问,只是类普通变量,排除全局,静态变量。

  • 相关阅读:
    ContextMenuStrip 类
    ToolStripMenuItem
    ubuntu16.04下安装cuda8.0
    插入排序
    Python *args **kw
    python面向对象编程
    0/1背包问题(回溯法)
    Python decorator装饰器
    Python 函数式编程
    分治策略(求解递归式的方法)
  • 原文地址:https://www.cnblogs.com/zhidao-chen/p/3829855.html
Copyright © 2011-2022 走看看