3

我正在编写一个执行大量字符串解析的 c++ 应用程序。我将字符串定义保存在一个普通的头文件中(没有相应的 C++ 文件)。

头文件使用#ifdef XXX 确保编译器只处理一次。

我可以选择声明字符串

const TCHAR m_szRoot[] = _T("root");

或者

static const TCHAR m_szRoot[] = _T("root");

这些变量在应用程序中被多次使用。

推荐的声明是什么?从应用程序大小的角度来看,哪个声明更好。

4

2 回答 2

3

如果您static从包含在多个翻译单元中的标题中进行相同操作,则每个生成的文件都将获得自己的对象副本,这可能会增加应用程序的占用空间。此外,对象将驻留在不同的地址,可能会使相等比较变慢。链接时优化可以组合相同的常量,但这是可选的。

避免重复的某种方法是将常量放在单独的翻译单元(即 CPP 文件)中,并extern在头文件中使用。

标题:

extern const TCHAR m_szRoot[];

常量.cpp:

const TCHAR m_szRoot[] = _T("root");

这将确保每个常量的单一定义。

于 2013-03-23T10:49:08.750 回答
2

忘记微优化!!

如果static要将变量的范围限制为单个翻译单元,请使用。
static给你内部链接。
这应该是声明它的标准,static而不是优化。编译器会做任何需要做的优化。

于 2013-03-23T10:47:32.583 回答