c++ 静态成员遇到的坑总结

2014-11-24 07:49:55 · 作者: · 浏览: 0
1.对于类静态变量的初始化,用下面方法。
1 //.h头文件中
2 class a
3 {
4 public:
5   const static int i;
6 };
静态成员的初始化应放在.cpp中而不是.h中。
因为h可能被多个cpp包含(#include),这种情况下,如果是在h中初始化静态成员的 就会造成编译期间的“重定义”错误。
1 //.cpp文件
2 const int a::i=1; //定义前置
定义要前置放在类实现最前面,避免有时候放到了用到的函数后面。
2.对于静态常量的初始化, vc6编译器仅支持下面方法
  
复制代码
1 //.h头文件
2 class a
3 {
4   public:
5   const static int i;
6 };
7 //.cpp文件
8 const int a::i=1;
复制代码
注意这种方法一定要把const int a::i=1;放到类实现部分的最前面。
因为后边成员函数可能需要用到他的值。
gcc、mingw除了上面的方法之外也可用下面的方法:
1 class a
2 {
3 public:
4   const static int i=1;
5 };