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