C++内部链接与外部链接
来源:优易学  2010-1-14 17:30:20   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  c)类定义总有内部连接,而非inline类成员函数定义总有外部连接,不论这个成员函数是静态、虚拟还是一般成员函数,类静态数据成员定义总有外部连接。

  1.类的定义有内部连接。如果不是,想象一下你在4个cpp文件中include定义了类Base的头文件,在4个编译单元中的类Base都有外部连接,在连接的时候就会出错。

  看下面的例子:

  //main.cpp

  class B //类定义,内部连接

  {

  static int s_i; //静态类成员声明,内部连接

  public:

  void foo()

  {

  ++s_i;

  } //类inline函数,内部连接

  };

  struct D

  {

  void foo(); //类成员函数声明,内部连接

  };

  int B::s_i = 0; //类静态数据成员定义,外部连接

  void D::foo() //类成员函数定义,外部连接

  {

  cout << "D::foo in main.cpp" <<endl;

  }

  int main() //main函数,全局自由函数,外部连接

  {

  B b;

  D d;

  return 0;

  }

  //a.cpp

  class B

  {

  int k;

  };

  struct D

  {

  int d;

  };

  在这个例子中,main.cpp与a.cpp中都有class B和class D的定义,但在编译这两个cpp文件时并不发生link错误。

  2.类的非inline成员函数(一般,静态,虚拟都是)总有外部连接,这样当你include了某个类的头文件,使用这个类的函数时,就能连接到正确的类成员函数上,继续以上面为例子,如果把a.cpp中的struct D改为

  struct D                       //类定义

  {

  int d;

  void foo();                    //类成员函数声明

  };

上一页  [1] [2] [3] [4] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训