• 尽可能使用 const


    前言

      const 关键字是常量修辞符,如果要告知编译器某个变量在程序中不会发生改变,则可将其声明为 const。

      但,对 const 关键字的认识不能仅仅停留在这一层 - 它提供了很多更强大的功能。

      因此很多情况下 const 关键字的使用方法也不是简单的 const + 变量,其用法总的来说是比较灵活的。

    指针的 const 关键字

      const 关键字出现在 * 左边或是右边定义出来的指针完全不同。

    1 const int *pa = &a;

      这样的一行代码定义了一个指向整型变量 a 的指针 pa。

      其中 const 关键字的作用是说明你无法通过指针 pa 来修改变量 a 的值,此后 *pa = 1 这样的语句将被编译器报错。

    1 int * const pa = &a;

      这样的一行代码同样定义了一个指向整型变量 a 的指针 pa。

      但这时 const 关键字跑到 * 右边来了,此时它的意义是说明指针 pa 本身无法发生改变,此后 pa++ 这样的语句将被编译器报错。

     迭代器的 const 关键字

      迭代器其本质,也就是个指针。

      但请看定义某个迭代器的语句:

    1 std::vector<int>::iterator iter = v.begin();

      这个迭代器指向整型 vector 容器 v 的第一个元素。

      现在问题是,没有出现 * ,那么我如何控制这个指针是指向的元素不变,还是其本身不变呢?

      答案是,如果直接定义 const 迭代器,如下:

    1 const std::vector<int>::iterator iter = v.begin();

      那么定义出来的指针其限制是指针本身不变,如同 const 放在 * 右边。那么如何定义一个指向内容不变,但指针本身可以变化的 const 迭代器呢?

      方法如下:

    1 std::vector<int>::const_iterator cIter = v.begin();

      实际使用中你会发现,后一种迭代器使用频率很高,而第一种迭代器基本没啥作用,纯属卖萌的。

    成员函数的 const 关键字

      将一个成员函数的声明末尾加上 const 关键字,可以为该成员函数添加一个约束 - 无法改变其所属对象中成员变量的值。

      这个用法很多人会忽略掉,但是它在调试中会发挥到很多意想不到的作用 :)。

    啰嗦几句

      1. 运算符的重载函数在很多情况下应当返回 const 类型。

      2. 成员函数的 const 版本和非 const 版本能够实现重载。

      3. const 成员函数的作用更大在于使操作 const 对象成为可能,这一点将在以后的文中提到并细致分析。

    小结

      const 是个非常实用的关键字,对我们写出高效而健全的代码很有帮助,应当尽可能的去使用它,发挥它的作用。

  • 相关阅读:
    bzoj2004(矩阵快速幂,状压DP)
    bzoj1242(弦图判定)
    uva1659(最大费用循环流)
    bzoj1009
    bzoj2893(费用流)
    bzoj4873(最大权闭合子图)
    bzoj2879(动态加边费用流)
    51nod 1239 欧拉筛模板
    poj2774 sa模版
    洛谷3391文艺平衡树
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3931880.html
Copyright © 2020-2023  润新知