在c ++入门(第四版)中。有以下部分
与其他变量不同,除非另有说明,否则在全局范围内声明的const变量是 定义对象的文件的本地。该变量仅存在于该文件中,不能存在 由其他文件访问。 我们可以通过指定它是extern来使整个程序中的const对象可访问:
// file_1.cc
// defines and initializes a const that is accessible to other files
extern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses bufSize from file_1
// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
// ...
我试过这个
// file_1.cc
// defines and initializes a const that is accessible to other files
const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses bufSize from file_1
// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
// ...
这也没问题。所以我的问题是:
const变量是本地文件还是这只是一个错误?
非常感谢。
答案 0 :(得分:3)
在C中,常量值默认为外部链接,因此它们只能出现在源文件中。在C ++中,常量值默认为内部链接,这允许它们出现在头文件中。
当您在C源代码文件中将变量声明为const时,请执行以下操作:
const int i = 2;
然后您可以在另一个模块中使用此变量,如下所示:
extern const int i;
但是要在C ++中获得相同的行为,必须将const变量声明为:
extern const int i = 2;
如果您希望在C ++源代码文件中声明extern变量以用于C源代码文件,请使用:
extern "C" const int x=10;
防止C ++编译器进行名称修改。
参考:http://msdn.microsoft.com/en-us/library/357syhfh%28v=vs.71%29.aspx
答案 1 :(得分:0)
extern
只是一个声明,无论变量是否为const
。
const
暗示内部链接。您可以将其视为
static int x;
在全局范围内,您无法修改。如果通过“本地文件”表示内部链接,那么是的,这是正确的。