C++静态变量

Any*_*orn 5 c++ static

我试图设计仅头文件库,遗憾的是需要有全局静态变量(在类或命名空间中).

有没有任何方法或首选解决方案在保持标头设计的同时拥有全局静态变量?

代码在这里

sel*_*tze 10

有几种选择.我想到的第一件事是C++允许在多个翻译单元中定义类模板的静态数据成员:

template<class T>
struct dummy {
   static int my_global;
};

template<class T>
int dummy<T>::my_global;

inline int& my_global() {return dummy<void>::my_global;}
Run Code Online (Sandbox Code Playgroud)

链接器将多个定义合并为一个.但是inline单独也可以在这里提供帮助,这个解决方案更简单:

inline int& my_global() {
   static int g = 24;
   return g;
}
Run Code Online (Sandbox Code Playgroud)

您可以将此内联函数放入头文件中,并将其包含在许多翻译单元中.C++保证此内联函数返回的引用始终引用同一对象.确保该功能具有外部链接.

  • +1本地静态是使用全局数据的最简单方法,特别是因为新的C++ 0x标准将保证即使在多线程应用程序中也能正确初始化. (2认同)