在阅读C++书籍时,我了解到要在多个文件中共享一个const变量/对象,我们需要在其中一个文件中定义一次const变量,并在使用它的每个源文件中声明它。例如,

在file1中。cpp,我们全局定义一个const int变量,如

extern const int ca = 100;

在file2中。cpp在我们使用它的地方,我们像这样声明这个变量

extern const int ca;

上述惯例对我来说非常有意义。但是,当涉及到const char指针时,我们不需要使用extern来定义它,并且它可以很好地跨多个文件共享。为什么会发生这样的事情?例如,

在file1中。cpp,我们全局定义一个const char指针变量,如

const char *cstr = "hello";

在file2中。cpp在我们使用它的地方,我们像这样声明这个变量

extern const char *cstr;

为了使我的问题更具体,为什么cstr可以在file2中使用。cpp即使它在file1中没有用"extern"装饰。cpp?

非常感谢

有帮助吗?

解决方案

问题是联系问题之一。当你定义一个变量在 命名空间范围,并且没有以前的声明 建立链接,如果对象不是外部链接 const,内部如果是。所以当你写:

int const ca = 100;

在源文件中,链接将是内部的,实体 (变量) ca 指将是唯一的那个翻译 单位。如果你写了:

int ca = 100;

链接将是外部的,所以一个

extern int ca;

在另一个翻译单元将引用相同的变量。

当然,当你写的时候:

char const* cstr = "hello";

你正在定义一个指针,它不是const(尽管它 指向const)。

当然,通常情况下,您会在标题中声明变量, 与 extern, ,所以会有一个以前的声明,当你 定义变量,它是第一个声明 建立链接。

其他提示

extern用于使其明确表示语句“extern const char * cstr;”是一个声明而不是定义,CSTR在其他地方定义。如果你做了“const char * cstr;”编译器会将其解释为定义,并且您最终将有2个CSTr变量。

如果您在“const char * cstr=”hello“;我猜编译器忽略它,因为初始化意味着您实际上定义了变量。

更多以下: http://en.wikipedia.org/wiki/external_variable

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top