如何在C++11中正确的初始化静态常量成员数组

最近开始慢慢使用C++11,在众多新特性的面前显得还有些力不从心。

下面的代码视图使用一个静态常量数组作为类成员,并希望利用C++11特性直接在定义中赋值:

class A
{
    const static char a[5] = {0};
};

// ...

char tmp = A::a[2];

然而直接这样做是错误的,为了通过编译器,必须将const替换为constexpr:

  

class A
{
    constexpr static char a[5] = {0};
};

// ...

char tmp = A::a[2];

迈进一大步。但是这样还不够,因为链接器仍旧无法正确链接,于是你还需要这样做:

class A
{
    constexpr static char a[5] = {0};
};

// ...

constexpr char A::a[5];

// ...

char tmp = A::a[2];

现在才算大功告成。但是说起来,如果我在源代码中加上这一行,还不如索性使用C++03的方式:

class A
{
    const static char a[5];
};

// ...

const char A::a[5] = {0};

// ...

char tmp = A::a[2];

看起来C++11这方面也没有太大的进步呢。  

 

你可能感兴趣的:(C++)