我是分配给同一个变量还是重新定义一个新变量?

时间:2013-08-11 13:02:21

标签: c++

在A.h:

#ifndef A_h
#define A_h

#include "string"

extern std::string a;

#endif

在A.cpp中,在全球范围内:

#include "A.h"

std::string a = "a";

2 个答案:

答案 0 :(得分:3)

您没有重新定义变量,因为您的代码只有一个定义 - CPP文件中的定义。标头中的一个是声明,因为它使用extern关键字。 CPP文件为标头中声明的变量提供定义。

答案 1 :(得分:1)

以这种方式思考:编译器只看一次A.cpp。如果您的项目有许多#included A.h的源文件,编译器会多次看到A.h,每次#include一次,因为它处理所有* .cpp文件。在这种情况下,有一个定义和多个声明

是合乎逻辑的

你拥有的是正确的 - A.cpp中全局范围内的变量。作为全球性和非静态性,它有可能在其他地方使用。事实上,如果没有在其他地方使用它,它会污染命名空间。