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

 

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

    ①类成员的声明

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

  而类成员的编译顺序则按照成员在类中的声明顺序进行编译,其中类成员包括:①数据成员②成员函数③嵌套类型(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的影响。

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

  

  

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

上一篇:LR报错Error -27796: Failed to connect to server解决


下一篇:Layui layuidate 最大值不能超过今天