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常量会在内存中分配(可以是堆中也可以是栈中)。

  • 相关阅读:
    【算法】二分图的判定
    【模板】并查集 两种路径压缩写法(类模板和函数模板)
    【模板】堆的结构
    新疆大学OJ(ACM) 1099: 数列有序!
    新疆大学OJ(ACM) 1047: string 字符串排序
    新疆大学(新大)OJ xju 1010: 四个年级 C++ STL map 将4层循环优化成2层循环可解
    新疆大学(新大)OJ xju 1009: 一带一路 prim求最短路径+O(n)素数筛选
    新疆大学(新大)OJ xju 1006: 比赛排名 第二类斯特林数+阶乘
    【算法】第二类斯特林数Stirling
    【复习资料】编译原理中:短语,直接短语,句柄
  • 原文地址:https://www.cnblogs.com/qiaoconglovelife/p/5322521.html
Copyright © 2011-2022 走看看