zoukankan      html  css  js  c++  java
  • The Binding of a Data Member

    《深度探索C++对象模型》第三章“Data语意学” 

    3.1 The Binding of a Data Member

    下面一段代码的输出是什么?

    [xiaochu.yh@OceanBase cpp]$ cat member_binding.cpp 
    #include <iostream>
    using namespace std;
    
    typedef int len_t;
    
    class Point
    {
      public:
        void mum(len_t val) { _val = val; cout << _val << endl; }
      private:
        typedef float len_t;
        len_t _val;
    };
    
    int main()
    {
      Point p;
      p.mum(123.3);
      return 0;
    }
    


    答案是:123


    那么下面一段代码呢?

    [xiaochu.yh@OceanBase cpp]$ cat member_binding.cpp     
    #include <iostream>
    using namespace std;
    
    typedef int len_t;
    
    class Point2
    {
      private:
        typedef float len_t;
      public:
        void mum(len_t val) { _val = val; cout << _val << endl; }
      private:
        len_t _val;
    };
    
    
    int main()
    {
      Point2 p2;
      p2.mum(123.3);
      return 0;
    }
    

    答案是:123.3


    从上面的案例中可以知道,作为一种防御性编程风格,建议把类体中的typedef放在最前面,如例2中所示。

    还看最后一段代码,会是什么输出呢?

    [xiaochu.yh@OceanBase cpp]$ cat member_binding.cpp 
    #include <iostream>
    using namespace std;
    
    class Point
    {
      public:
        void mum(len_t val) { _val = val; cout << _val << endl; }
      private:
        typedef float len_t;
        len_t _val;
    };
    
    int main()
    {
      Point p;
      p.mum(123.3);
      return 0;
    }


    答案是:编译失败

    member_binding.cpp:7: error: ‘len_t’ has not been declared


  • 相关阅读:
    WCF进行大数据传输时的相关配置(转)
    自定义绑定(转)
    菜鸟学TSQLSQL2005读书笔记1
    再别康桥英文及译文
    自定义绑定2
    我要读的书
    菜鸟学TSQLSQL2005读书笔记
    Bad Habbits
    实践测试驱动开发
    针对接口写测试用例
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000660.html
Copyright © 2011-2022 走看看