【发布时间】:2011-09-04 15:45:55
【问题描述】:
由于单一定义规则,在 C 或 C++ 中不允许对全局变量进行多重定义。但是,在 C++ 中,一个 const 全局变量可以在多个编译单元中定义而不会出错。这与 C 中的不同。
为什么 C++ 允许,而 C 不允许?与 C 相比,为什么 C++ 中 const 全局的用法和行为与非 const 全局不同? C++ 和 C 在 const 方面发生了什么?
例如,这在 C++ 中是允许的,但在 C 中是错误的:
// Foo.cpp
const int Foo = 99;
// Main.cpp
const int Foo = 99;
int main()
{
cout << Foo << endl;
return 0;
}
这对 C 来说很好,但对 C++ 来说是错误的:
// Foo.cpp
const int Foo = 99;
// Main.cpp
extern const int Foo;
int main()
{
cout << Foo << endl;
return 0;
}
【问题讨论】:
-
您似乎已经回答了自己的问题...?你对哪一部分感到困惑?
-
我猜他对这样一个事实感到困惑:他不能将 const int 声明为 extern 而不会出现链接错误。
-
Merlyn:我知道如何在 C++ 中使用 const。我很想知道为什么 const 是这样设计的,而不是像普通的全局变量?
-
可以说,这是stackoverflow.com/questions/998425/…的副本
标签: c++ c constants one-definition-rule