首页 > 代码库 > Inside the C++ Object Model: The binding of data member
Inside the C++ Object Model: The binding of data member
本节提到了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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。