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

Posted 放不下的小女孩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类成员的编译顺序之嵌套类型对类的影响相关的知识,希望对你有一定的参考价值。

 

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

    ①类成员的声明

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

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

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

  

  

以上是关于类成员的编译顺序之嵌套类型对类的影响的主要内容,如果未能解决你的问题,请参考以下文章

Java内部类

嵌套类:如何访问封闭类中的成员变量

python中如何对类的成员函数开启线程?

Java代码块

inline 关键字对类成员模板函数的影响?

Java | 内部类(Inner Class)