c++ 为什么在定义(而不是声明)静态数据成员时,可能不使用“static”?

我正在寻找在C中初始化静态地图的方法,并找到这个代码:

struct A{
static map<int,int> create_map()
    {
      map<int,int> m;
      m[1] = 2;
      m[3] = 4;
      m[5] = 6;
      return m;
    }
static const map<int,int> myMap;

};

const map<int,int> A:: myMap =  A::create_map();

但是,如果我更改最后一行

const static map<int,int> A:: myMap =  A::create_map();

编译器投诉:在定义(而不是声明)静态数据成员时,可能不使用’static’?

我想知道为什么?这背后的逻辑或推理是什么?

static int    a = 0; // grandfathered and still useful, provides static *LINKAGE*
                     // and static STORAGE DURATION
static int X::a = 0; // confusing and illegal, is it static LINKAGE
                     // or static STORAGE DURATION
                     // or static MEMBERSHIP?

静态在变量定义中使用时,已经有了一个意义(在C中). C程序员学习C来发现这个意思有时会改变,但并不总是会非常令人惊讶的.

所以新的意义(静态成员资格)只在类定义(C中不允许静态关键字)中有效.

翻译自:http://stackoverflow.com/questions/15235161/why-static-may-not-be-used-when-defining-as-opposed-to-declaring-a-static

转载注明原文:c++ 为什么在定义(而不是声明)静态数据成员时,可能不使用“static”?