c++ - 在这种情况下我应该使用静态吗

标签 c++ windows

我有一个全局唯一值,我希望在 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/

相关文章:

c++ - 带有嵌套循环的标记元素 C++ 数组

c++ - 获取 WinPcap 地址信息时出错

windows - 如何使用 python 2.7 移动 Windows 桌面图标?

Windows 服务安装文件夹.Net

java - SonarQube +单元测试覆盖率+Java项目

Windows echo 命令无法回显用户设置的变量

c++ - 未初始化的常量

c++ - 如何通过local_iterator删除boost unordered_map中的元素?

c++ - 为什么我的 Arduino 不能超过 10?

windows - Python 事件