• C++之const关键字


    本文引自http://www.cnblogs.com/lichkingct/archive/2009/04/21/1440848.html ,略有增删

    const关键字在c++中用法有很多,总结如下:

    1. 修饰变量和指针:
      • 修饰变量时把变量转换为常量,定以后不能修改,定义时就要初始化。含义是const修饰的变量varName时只读的,不可改变。格式如下:
        TYPE const varName=value;
        const TYPE varName=value;(推荐写法)
        试图定义一个非const对象的指针指向一个常量对象将会导致编译错误.
        const double minWage= 9.60;
        double *ptr=&minWage  //引起编译错误
        const double *ptr=&minWage //编译正确
      • 修饰指针时,const在不同的位置含义不同,记忆的方法:const在*前则可认为const修饰的是解指针的值,即内容不可变,const在*后则可认为const修饰的是指针,即指向的地址不可变
        const char* ptr="abc"; //*ptr不可变,ptr可变,即指针指向的内容不可变,而指针可以指向其他位置
        char const *ptr="abc";//同上
        
        char *const ptr="abc" //ptr不可变,*ptr可变,即指针指向的地址不能变,地址中存放的数据可以边
        const char* const ptr="abc"//两者都不可变
    2. const修饰函数参数:表示函数体中不能修改参数的值
    3. const修饰类对象/对象指针/对象引用:表示对象,对象指针和对象引用中的任何成员都不能被改变,且只能调用const成员函数。const修饰类成员变量:表示成员常量,它只能在初始化列表中赋值
    4. class Base
      {
      ...const int value;
      
      ....A(intx):value(x){}//在成员初始化列表中初始化const常量
      };
    5. const修饰类成员函数:该成员函数不能修改类中任何成员变量,且只能调用const成员函数
      class Base
      {
      void function()const; //常成员函数, 它不改变对象的成员变量. 也不能调用类中任何非const成员函数
      
      }
    6. const常量与defin宏定义的区别
      • 编译器处理方式不同:
        • define宏在预处理阶段展开
        • const常量在编译运行阶段使用
      • 类型和安全检查不同
        • define宏没有类型,不做任何类型检查,仅仅展开
        • const常量具有具体的类型,在编译价额段执行类型检查
      • 存储方式不同
        • define宏仅仅是展开,在哪个地方使用就在哪个地方展开
        • const常量在内存中分配
  • 相关阅读:
    《最优化导论》-8梯度方法
    《最优化导论》-7一维搜索方法
    《最优化导论》-6集合约束和无约束优化问题基础
    ubuntu set up 3
    ubuntu set up 2
    ubuntu set up 1
    Xavier and Kaiming Initialization
    Network Initialization: Fan-in and Fan-out
    The Softmax function and its derivative
    GNU Screen使用
  • 原文地址:https://www.cnblogs.com/phenixyu/p/4245009.html
Copyright © 2020-2023  润新知