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


  • 相关阅读:
    文件系统管理
    软件包管理
    用户和用户组管理
    权限管理
    漏洞验证系列--MongoDB未授权访问
    【Jenkins】三、设置定时任务
    在CentOS Linux 7.5上安装MySQL
    CentOS7使用yum时File contains no section headers.解决办法
    Windows批处理(cmd/bat)常用命令学习
    Fiddler抓包工具总结
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000660.html
Copyright © 2011-2022 走看看