【发布时间】:2010-12-28 15:33:10
【问题描述】:
是在头文件中声明 extern const 还是只是 extern 相同的东西?也都会给外部链接?
globals.cpp
#include <string>
extern const std::string foo = "bar";
globals.h
#ifndef GLOBALS_H
#define GLOBALS_H
#include <iostream>
extern const std::string foo;
#endif /* GLOBALS_H */
或
globals.h
#ifndef GLOBALS_H
#define GLOBALS_H
#include <iostream>
extern std::string foo;
#endif /* GLOBALS_H */
编译和运行都很好,在多个文件中使用时都给出相同的地址,哪个更正确?
【问题讨论】:
-
这不是哪个“更正确”的问题;其中之一实际上是不正确的,如果实际使用 foo 将导致错误。请参阅下面的答案。
-
我在其他文件中做了 cout foo.c_str(),仍然编译和运行良好.. 很奇怪。
-
这似乎是错误的。要么发生了更复杂的事情,要么你的编译器/链接器没有很好地检查声明。如果您尝试从这些文件之一修改 foo 会发生什么?例如是否 foo.clear();编译好吗?如果是这样,如果您在标头中使用“const”版本,它仍然可以编译吗? (如果它仍然可以编译,那么它可能不是文件看到的标头声明。)
标签: c++ global-variables constants extern