您的位置:首页 > 编程语言 > C语言/C++

[C++再学习系列] 具有链接的C++实体

2009-07-11 17:13 363 查看
具有链接的实体,包括名字空间级的变量和函数

,都是需要分配内存的。具有链接的实体如果在源文件

(cpp)

中出现多次,将意味着多次分配内存,每个内存空间定义一个特定的实体。这会导致

:1)

空间膨胀;

2)

出现多个变量,变量的状态不共享。

因此,不能将下面的代码放在头文件:

// avoid defining entities with external linkage in a header

int fudgeFactor;

std::string hello("Hello, world!");

void foo() {/* … */}

上述的全局变量和函数定义,在该头文件被多个源文件包含时,将导致连接错误,编译器将报告存在名字重复。

问题的解决方案:

//put just the declarations in the header:

extern int fudgeFactor;

extern string hello;

void foo();
//
"extern" is optional with function declarations

//The actual definitions go in a single implementation file:

int fudgeFactor;

string hello("Hello, world!");

void foo() {/* … */ }

更应该注意的是

static

的头文件链接实体:

// avoid defining entities with static linkage in a header

static int fudgeFactor;

static string hello("Hello, world!");

static void foo() {/* … */ }

C++

中,

static

数据和函数的重复是合法的。编译器将

static

对象解释成:每个文件都有一个私有副本

(static

的作用域是文件

)

。这意味着编译器不会报错,这样会导致每个文件都拥有自己的独立副本。故要慎用

static

变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: