C++ 跳过const global的extern仍然可以正常工作

C++ 跳过const global的extern仍然可以正常工作,c++,constants,global,extern,C++,Constants,Global,Extern,据说,对于从外部引用的常量变量(即具有外部链接),extern关键字是必需的。因此: const int f = 3; // Definition of f with internal linkage (due to const) extern const int g; // Declaration of g with external linkage 如果这是正确的,那么以下各项如何仍能正常工作: 在s1.cpp中,我声明并初始化了const int a=9,没有extern: s1.cpp

据说,对于从外部引用的常量变量(即具有外部链接),
extern
关键字是必需的。因此:

const int f = 3; // Definition of f with internal linkage (due to const)
extern const int g; // Declaration of g with external linkage
如果这是正确的,那么以下各项如何仍能正常工作: 在s1.cpp中,我声明并初始化了
const int a=9
,没有
extern

s1.cpp 但是这里是s2.cpp,我仍然可以毫无问题地访问
a

s2.cpp
#包括
#包括“h1.h”
使用名称空间std;
使某物无效
{

cout这是因为您在
s1.cpp
中包含了
h1.h
,所以(关于您的问题)您有如下内容:

extern const int a;
const int a = 9;
这意味着
a
被声明为具有外部链接,然后在此处定义和初始化,因此
a
在另一个模块
s2.cpp
中可见,该模块仅包括
h1.h

extern const int a;

这是因为您在
s1.cpp
中包含了
h1.h
,所以(关于您的问题)您有如下内容:

extern const int a;
const int a = 9;
这意味着
a
被声明为具有外部链接,然后在此处定义和初始化,因此
a
在另一个模块
s2.cpp
中可见,该模块仅包括
h1.h

extern const int a;

可能重复的需要指定编译器和生成命令。否则,行为不可靠。投票关闭,因为缺少可复制的示例(请参见上面的注释)。可能重复的需要指定编译器和生成命令。否则,行为不可靠。投票关闭,因为缺少可复制的示例(见上述注释).那么,在哪种情况下,你认为我会预加关键字extern,没有它就会抛出错误?那么,在哪种情况下,你认为我会预加关键字extern,没有它就会抛出错误?
extern const int a;