比方说,我有一个C以下设置++程序,在全球/命名空间范围(以外的任何块):EXTERN常量,这是声明,这是向前声明
情况1:
a.cpp
extern const int i=5;
b.cpp
extern const int i;
有两种方式,在我的脑海里,编译器可以看到这一点。一个是,真正的声明是在b.cpp中,而a.cpp只有一个前向声明和初始化。 (因为我们知道,对于特定的外部常量,在声明时不需要初始化)编译器可能生成的其他可能的可执行文件将包含含有真实声明的a.cpp,并进行初始化,并且可以看到b.cpp中的语句作为前向声明,只需要在那里协助编译器知道我是什么。
编译器如何决定哪个文件负责实际的声明,并因此与我相关的内存分配?如果使用了一个有趣的构造函数,而不是int,那么这可能会有明显的影响。
如何回答这个问题的变化,如果有的话,有:
情况2:
a.cpp
extern const int i;
extern const int i=5;
b.cpp
extern const int i;
你声明它是'extern',你也说你知道它的价值。这似乎是错误的。 – tadman
@tadman我编译时没有任何错误。为什么这是错的?我以为“extern”只是表示标识符名称具有外部链接。这是否也意味着您无法将其初始化为已知值? – Jeff
通常'extern'的意思是“存储在另一个文件中”,链接器负责使其同步。你如何编译所有这些? – tadman