我有一个全局唯一值,我希望在 exe 和不同的 DLL 中使用它。
对于任何希望使用它的项目,他们可能只包含 defs.h
我在想,我是否应该将其声明为
// defs.h
const UINT UNIQUE_MESSAGE =
RegisterWindowMessage(_T("UNIQUE_MESSAGE-{E5476FDB-3E7E-4113-8132-1D87709BC46C}"));
或
// defs.h
const static UINT UNIQUE_MESSAGE =
RegisterWindowMessage(_T("UNIQUE_MESSAGE-{E5476FDB-3E7E-4113-8132-1D87709BC46C}"));
目前,从代码消费者的角度来看,我没有发现任何不同。后面有什么陷阱吗?我应该使用 static
吗?
最佳答案
在 C++ 中,namespace level const
是隐式的 static
( i.e it has internal linkage ),除非你写 extern const
。所以你的语法基本相同。
§7.1.1/6 说,
Objects declared const and not explicitly declared extern have internal linkage.
所以我建议这样做:(考虑最少,例如排除 static initialization order fiasco 以及 static
和全局变量的许多其他问题)
//in defs.h:
extern const UINT UNIQUE_MESSAGE;
//defs.cpp
const UINT UNIQUE_MESSAGE = RegisterWindowMessage(_T("whatever"));
关于c++ - 在这种情况下我应该使用静态吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5787466/