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 指针或者引用来处理传参, 尽量最大程度的获得编译器的优化。

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

  • 相关阅读:
    一些总结与思考(聊聊最近,希望对大家有所帮助)
    操作符、语句、函数——Javascript高级程序设计
    Javascript高级程序设计——语法、关键字、保留字、变量、数据类型
    Javascript高级程序设计——Javascript简史+使用Javascript
    Angular.js!(附:聊聊非原生框架项目)
    JS事件绑定深入
    Javascript事件绑定及深入
    实现API管理系统的几个重要关键词
    实现API优先设计的重要性和实现方式
    对API进行版本控制的重要性和实现方式
  • 原文地址:https://www.cnblogs.com/leehm/p/10972970.html
Copyright © 2011-2022 走看看