码迷,mamicode.com
首页 > 编程语言 > 详细

Inside the C++ Object Model: The binding of data member

时间:2014-08-26 09:47:35      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   ar   问题   div   代码   

本节提到了typedef的作用域以及解析方式的问题,有以下代码段:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 typedef int length;
 6 
 7 class X {
 8 public:
 9     length getVal() {
10         cout << sizeof(_val) << endl;
11         return _val;
12     };
13     void setVal(length val) {
14         cout << sizeof(val) << sizeof(_val) << endl;
15         _val = val;
16     };
17 private:
18     typedef double length;
19     length _val;
20 };
21 
22 int main(int argc, char* argv[]) {
23     X x;
24     x.setVal(3);
25     x.getVal();
26     return 0;
27 }

其输出结果为:48和8.

在setVal函数中,参数部分的length被解析成了全局定义的typedef int length,而函数体中的length被解析成了class X里面定义的typedef double length。

由此得出的结论为,setVal参数部分的变量类型绑定是根据已经出现过的类型定义来做的,而函数体中的变量的类型绑定则是需要等整个class都分析完以后才开始执行绑定的。

顺便,如果将第5行的typedef int length删掉以后,整个程序将会报错。

Inside the C++ Object Model: The binding of data member

标签:style   blog   color   os   io   ar   问题   div   代码   

原文地址:http://www.cnblogs.com/aozorany/p/3936461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!