static const vs. c ++中的#define - 可执行文件大小的差异

j_s*_*ltz 9 c++ constants

我的基本情况:我有一个类似的包含文件#define foo (Flag1 | Flags2 | Flag3),所以它是一个预定义的位标志组合.为了类型安全,我想用静态consts替换这些#defines,即static const int foo = (Flag1 | Flag2 | Flag3)(或类似).这个包含文件包含在程序的许多地方.

现在当我在启用所有相关优化选项的发布版本时(使用VS2010的C++编译器),替换#defines似乎会将可执行文件增加几个KiB,具体取决于我替换了多少常量.

为什么会这样?据我所知,整数常量应该被"内联"到尽可能产生的ASM代码中,我不知道使用static constvs #define会如何在这里产生影响.很明显,变量没有内联,因为反汇编显示:

#define:
01325041  or          eax,0FFD87FE0h
static int:
011E5451  or          eax,dword ptr [CMainFrame::s_TemplateModulePaths+38h (151F008h)]
Run Code Online (Sandbox Code Playgroud)

所以最后一个问题是:我如何避免#define但仍然依赖于直接插入到生成的程序集中的变量?

j_s*_*ltz 0

正如评论中所见,类型安全运算符| 我的枚举的重载似乎阻止了 VC++ 内联 ORed 值。我想我会继续使用该#define版本,因为如果没有好处,我讨厌增加可执行文件的大小(不,这不是过早的优化) - 毕竟,它不会增加可读性,而且由于标志的组合已经是我的flagset 枚举类型,我想我也不会失去任何类型安全。