了解三种识别名称的连接类型

ZDNet软件频道 时间:2003-07-15 作者:ZDNet China |  我要评论(2)
本文关键词:cpptips
对象、引用、函数、类型、模板和命名空间被统称为识别名称。每个识别名称都有三种连接类型:外部连接,内部连接和无连接。
本文译自Builder.com,未经许可请勿转载对象、引用、函数、类型、模板和命名空间被统称为识别名称。每个识别名称都有三种连接类型:外部连接,内部连接和无连接。这些连接类型都规定了它在其他范围以及转译单元中的可见性。

识别名称的外部连接和程序的每个编译单元都有联系。比如:函数通常不被定义为静态的全局对象,常量对象可以定义为枚举类型等等。

下面列举了一些识别名称的外部连接方式:

 int n; //global non-static, hence external linkage
class C
{
 void f(); // member functions
 static int n;// static data members
};
extern const K; //defined in a different translation unit
void func ();
namespace NS
{
 class D{}; // qualified name NS::D has external linkage
}
enum DIR
{
 Up,
 Down
} // DIR, Up and Down have external linkage

识别名称的内部连接仅存在于编译单元的定义中。在一个命名空间中定义一个静态对象,那么这个命名空间的连接类型就是内部连接。匿名连接的成员、匿名命名空间的成员、typedef类型名,或者常量变量是不能定义成外部的。

下面举例说明识别名称的内部连接方式:

  static void f(); //a static function
static int q; //a static object declared in global scope
namespace //members of anonymous namespace
{
 class C{};
 int x;
 }
const M=1000; //const object not declared extern
union{ //members of an anonymous union
 int x;
 float y;
};
typedefint I; // typedef names


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134