zoukankan      html  css  js  c++  java
  • Effective C++ 读书笔记(39-45)

      条款三十九:明智而审慎的使用private继承

        1.C++裁定凡是独立(非附属)对象都必须有非零大小。

    class Empty{};//没有数据,所以其对象应该不使用任何内存
    
    class HoldAnInt
    {
     private:
            int x;
            Empty e;       
     
    }
    //你会发现sizeof(HoldAnInt)>sizeof(int);在大多数编译器中sizeof(Empty)获得1.但是还会有默认的内存对其操作。

        2.空白基类最优化

    class HoldAnInt:private Empty
    {
      private:
            int  x;
    }//几乎可以确定sizeof(HoldsAnInt)==sizeof(int)

        3.和上面的复合不同,private继承可以造成empty base最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要。

      条款四十:明智而审慎地使用多重继承

      条款四十一:了解隐式接口和编译期多态

        1.面向对象世界总是以显式接口和运行期多态解决问题。

        2.隐式接口不基于函数签名式,而是由有效表达式组成。

    template<typename T>
    void doProcessing(T& w)
    {
         if(w.size()>10 && w!=someNastyWidget)  //表达式
           .....
    }

        3.对classes而言接口是显式的,以函数签名为中心。多态则是通过virtual函数发生于运行期。

        4.对template参数而言,接口是隐式的,奠基于有效表达式。多态则是通过template具现化和函数重载解析发生于编译期。

      

      条款四十二:了解typename的双重意义

        1.任何时候当你想要在template中指涉一个嵌套从属类型名称,就必须在紧邻它的前一个位置放上关键字typename

    template<typename C>
    void print2nd(const C&container)
    {
      if(container.size()>=2)
      {
         typename C::const_iterator iter(container.begin());
          ....
      }
    }

        2.声明template参数时,前缀关键字class和typename可互换。

        3.请使用关键字typename标识嵌套从属类型名称;但不得在base class lists(基类列)或member initialization list(成员初值列)内以它作为base class 修饰符。

      条款四十三:学习处理模板化基类内的名称

      

      条款四十四:将于参数无关的代码抽离templates

      条款四十五:运用成员函数模板接收所有兼容类型

  • 相关阅读:
    Postman 接口数据生成
    python中获取中位数(搬来的)
    数据库域名配置
    每10秒执行定时任务/每5分钟执行一次(附crontab的常用的命令)
    MATCHED 用法
    leetcode279 Perfect Squares
    leetcode480 Sliding Window Median
    leetcode295 Find Median from Data Stream
    leetcode424 Longest Repeating Character Replacement
    leetcode209 Minimum Size Subarray Sum
  • 原文地址:https://www.cnblogs.com/xxiaoye/p/3582162.html
Copyright © 2011-2022 走看看