《深度探索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
原文链接: https://www.cnblogs.com/jiangu66/archive/2013/04/05/3000660.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/83367
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!