zoukankan      html  css  js  c++  java
  • C++中const用法总结

    1修饰变量/指针

      注意以下几种修饰的区别:

        (1)const int * a;

        (2)int const *a;

        (3)int * const b;

        (4)int const* const c;

      其中前两种指a是一个指向const int变量的指针;(3)b是一个const型的指向int变量的指针;(4)c是一个const型的指向const int变量的指针。

    2修饰函数形参变量/指针/引用

      如

        void fun(const a,const* b,const& c)

      指形参a和b、c在函数fun内是不可以被改变的。

      其实对变量a来说,const对它没有任何意义,因为a作为形参,本来就是实参的一个复制品,它的改变与否与实参没有任何影响。更常用的是修饰指针或变量,这样会使得函数的使用者无法改变实际指向/引用的变量,保证了安全性。

    3修饰函数返回值

      如

        const int fun1()

        const int* fun2()

        const int& fun3()

      这种用得不是很多,作用类似于修饰变量,返回一个const型的变量

    4修饰类对象/指针/引用

      如

        const classA a;

        const classB* b;

        const classC& c;

      (1)不能改变对象的任何成员变量

      (2)不能调用任何非const成员函数

    5修饰类成员变量

      (1)不能被修改

      (2)只能在类初始化列表中被赋值

       小总结:只能在类初始化列表中被赋值的情况:

        (1)const成员变量

        (2)引用变量

        (3)基类构造函数

    6修饰类成员函数

      如

        void fun() const;

      (1)不能修改类的任何非静态数据成员(可以修改静态数据成员);

      (2)不能调用类的任何非const函数(可以调用const成员函数)。 

    const常量与define宏定义的区别


      (1) 编译器处理方式不同

        define宏是在预编译阶段展开。

        const常量是编译运行阶段使用。

      (2) 类型和安全检查不同

        define宏没有类型,不做任何类型检查,仅仅是展开。

        const常量有具体的类型,在编译阶段会执行类型检查。

      (3) 存储方式不同

        define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

        const常量会在内存中分配(可以是堆中也可以是栈中)。

  • 相关阅读:
    使用element-ui组件el-table时需要修改某一行样式(包含解决样式无效的问题)或某一列的样式
    面试题:线程A打印1-10数字,打印到第5个数字时,通知线程B
    面试题:不使用数学库求平方根
    Springboot2.x集成Redis集群模式
    Springboot2.x集成Redis哨兵模式
    Springboot2.x集成单节点Redis
    基本算法:冒泡排序算法
    Redis进阶:Redis的哨兵模式搭建
    Redis进阶:Redis的主从复制机制
    Redis的消息订阅及发布及事务机制
  • 原文地址:https://www.cnblogs.com/qiaoconglovelife/p/5322521.html
Copyright © 2011-2022 走看看