zoukankan      html  css  js  c++  java
  • 尽可能使用 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 是个非常实用的关键字,对我们写出高效而健全的代码很有帮助,应当尽可能的去使用它,发挥它的作用。

  • 相关阅读:
    Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
    Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7
    Atitit.web 视频播放器classid clsid 大总结quicktime,vlc 1. Classid的用处。用来指定播放器 1 2. 标签用于包含对象,比如图像、音
    ListView与Adapter的那些事儿
    (转)Android反面自动静音
    (转)socket 与 file_get_contents的区别和优势的简单介绍
    Android ArrayAdapter 详解
    ImageView相关
    Android dip,px,pt,sp 的区别
    (转)Android 程序获取、设置铃声、音量、静音、扬声器
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3931880.html
Copyright © 2011-2022 走看看