• 条款3:尽可能的使用const


    const成员函数的一般好处有:

    • 它使得class接口比较容易理解。
    • 它使得操纵const对象成为可能。

    使用的过程中应该在const与non const成员函数之间避免代码重复:

    class TextBlock
    {
         public:
         ...
         const char & operator[](std::size_t position)const
         {
              ...          //边界检查
              ...          //日志数据访问
              ...          //校验数据完整性
              return text[position];
         }
         char & operator[](std::size_t position)
         {
              ...          //边界检查
              ...          //日志数据访问
              ...          //校验数据完整性
              return text[position];
         }
         private:
         std::string text;
    }
    这样做可以但是会导致你代码较为臃肿,做了很多的重复性的工作,事实上可以使用const——cast以及static_cast来实现如下的工作
    这个就叫做所谓的常量性的转除,用一个operator[]去掉用另外一个operator[]
    一般来说,用non-const来调用其const兄弟一般是一种安全的做法:
    const char & operator[](std::size_t position)const
    {
              ...          //边界检查
              ...          //日志数据访问
              ...          //校验数据完整性
              return text[position];
     }
          
    char &operator[]{std:size_t position}
    {
         return const_cast<char&>
         (
              static_cast<const TextBlocks&>(*this)
              [position]
         );
    }

      上面这一段可以做一些解释,第二个non-const语句块我们打算让non-const operator调用他的const兄弟,但是non-const操作符的后面如果只是单纯的调用operator[]那么会
      导致iwuxian递归的调用自己,所以应该加上static_cast来将*this先进行转型。所以这里总共是有两次的转型。第一次是将*this从Textblocks转型到const Textblocks,就是为*this
    来添加上const,之后再为返回的const operator[]中将const来移除。

      还有一点应该注意的是,绝对不要用const版本来调用non-const版本。
  • 相关阅读:
    《逆向工程核心原理》——通过调试方式hook Api
    《逆向工程核心原理》——代码注入
    《逆向工程核心原理》——DLL注入与卸载
    《逆向工程核心原理》Windows消息钩取
    windows回收站无法设置
    windbg安装pykd记录
    博客园添加萝莉小人
    ImportError: No module named site
    *CTF——Re复现
    ida远程调试Linux文件
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4854891.html
Copyright © 2020-2023  润新知