我正在编写一个c ++应用程序,它可以进行大量的字符串解析。我将字符串定义保存在普通的头文件中(没有相应的C ++文件)。
头文件使用#ifdef XXX来确保它只由编译器处理一次。
我可以选择声明字符串
const TCHAR m_szRoot[] = _T("root");
或
static const TCHAR m_szRoot[] = _T("root");
Theses变量在应用程序中多次使用。
建议的声明是什么?从应用程序大小的角度来看哪个声明更好。
答案 0 :(得分:3)
如果从多个翻译单元中包含的标题中创建相同的static
,则每个结果文件都将获得其自己的对象副本,这可能会增加应用程序的占用空间。此外,对象将驻留在不同的地址,可能使相等比较更慢。链接时优化可以组合相同的常量,但这是可选的。
避免重复的某种方法是将常量放在单独的翻译单元(即CPP文件)中,并在头文件中使用extern
。
部首:
extern const TCHAR m_szRoot[];
constants.cpp:
const TCHAR m_szRoot[] = _T("root");
这将确保每个常量的单一定义。
答案 1 :(得分:2)
忘记微观优化!!
如果要将变量的范围限制为单个翻译单元,请使用static
static
为您提供内部联系
这应该是声明它static
而不是优化的标准。编译器将执行任何需要完成的优化。