zoukankan      html  css  js  c++  java
  • c++ const 用法

    1.  修饰一般变量,const int a = 10;  表示此变量不能被修改,简单易懂,不多说

    2.  修饰指针,主要是下面三种

         const int *cp1 = &a;       //修饰int,不能修改指针指向的内存的值,即a的值

         int const *cp2 = &a;      //同上

         int *const cp3 = &a;      //修饰*, 指针本身不能修改,即不能改变指针指向a还是b

        助记:看const左边第一位,是什么类型就是修饰什么,左边没有找右边第一个

      int a = 10;
      int b = 20;
      std::cout << "a = " << a << std::endl;
      std::cout << "b = " << b << std::endl;
       
      //1
      const int *cp1 = &a;
      std::cout << "*cp1 = " << *cp1 << std::endl;
      cp1 = &b;     //        可以修改指针本身,即指向a还是b可以改
      //*cp1 = 1111;  //error, 修饰int,不能修改指针指向的内存的值,即a的值
      std::cout << "after cp1=&b,*cp1 = " << *cp1 << std::endl;
    
      //2  the same as 1
      int const *cp2 = &a;
       std::cout << "*cp2 = " << *cp2 << std::endl;
      cp2 = &b;
      //*cp2 = 2222;  //error
      std::cout << "*after cp2=&b,*cp2 = " << *cp2 << std::endl;
    
      //3
      int *const cp3 = &a;
      std::cout << "*cp3 = " << *cp3 << std::endl;
      //cp3 = &b;    //error,   修饰*, 指针本身不能修改,即不能改变指向a还是b
      *cp3 = 3333;  //       可以修改指针指向的内存的值,即a的值
      std::cout << "after*cp3=3333,*cp3 = " << *cp3 << std::endl;
    
      std::cout << "a = " << a << std::endl;
      std::cout << "b = " << b << std::endl;

    3.  修饰类成员函数

         const int setValue(const int value) const

         从左到右,1. 返回值不能改

                           2. 参数不能改

                           3. 常函数,函数成员变量不能被修改,如需要更改,请在成员变量前加上mutable

    class A
    {
    public:
      A():m_a(0) ,m_b(0){}
      virtual ~A(){}
     
    public:
      const int geta(){return m_a;}  //返回值不能被修改
      int setValue(const int value) const
      {
          //m_a = value; //error 函数后面有const,常函数,不能修改成员变量 
          m_b = value;   //      如果要修改,需要加上mutable修饰成员变量
          //value++;     //error const 修饰函数参数,不能被修改
          return value;
      }

    private: int m_a; mutable int m_b; };

    个人总结:

         实际应用中,一般用const来修饰自定义的复杂的数据结构或者类的指针或者引用,用以进行函数传参或者返回,避免传参时进行数据拷贝或者生成临时对象,影响程序性能,也常建议这么处理,尽量使用const 指针或者引用来处理传参, 尽量最大程度的获得编译器的优化。

          对于一般的基础类型变量本身就是进行值传递时,意义不大。

  • 相关阅读:
    php 高并发
    mysql 基础明细
    关于高并发和秒杀系统,你知道的和不知道的一些事
    carbon
    自定义tarbar
    学习小参考
    lnmp1.4,400,500,错误
    PHPSTORM+Thinkphp3.2模板标签替换Thinkphp5.1公式
    Thinkphp5.1手册太简单,有的功能用起来不确定结果是否和预料的一样,顾整理记录
    CentOS7 最小化安装vmware-tools
  • 原文地址:https://www.cnblogs.com/leehm/p/10972970.html
Copyright © 2011-2022 走看看