码迷,mamicode.com
首页 > 其他好文 > 详细

类成员的编译顺序之嵌套类型对类的影响

时间:2021-06-19 19:13:40      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:inf   abc   pac   length   bsp   影响   clu   har   info   

 

  现在编译器编译类时按照如下顺序:

    ①类成员的声明

    ②成员函数的函数体在类全部可见后开始编译

  而类成员的编译顺序则按照成员在类中的声明顺序进行编译,其中类成员包括:①数据成员②成员函数③嵌套类型(nested type)④枚举成员⑤模板成员。

  由于成员函数的声明包括返回类型,函数名和形参列表。所以其中形参列表和返回类型可能受到嵌套类型定义位置的影响,示例如下:

  1 #include <typeinfo>
  2 #include <iostream>
  3 #include <string>
  4 using namespace std;
  5 typedef string length;
  6 class A
  7 {
  8 public:
  9     void foo(length a)
 10     {
 11         cout<<typeid(a).name()<<endl;
 12     }
 13     typedef int length;
 14     length b;
 15 };
 16 
 17 int main()
 18 {
 19     A a;
 20     cout<<typeid(a.b).name()<<endl;
 21     a.foo("abc");
 22 }  

  输出结果

i
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

  可以看出成员函数foo的形参类型受到全局类型别名length的控制,类型为string,而数据成员b的类型则受到嵌套类型length的影响。

  所以类的定义中包含嵌套类型时最好将嵌套类型放到类的起始处

  

  

类成员的编译顺序之嵌套类型对类的影响

标签:inf   abc   pac   length   bsp   影响   clu   har   info   

原文地址:https://www.cnblogs.com/wildricky/p/14902622.html

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