最近开始慢慢使用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这方面也没有太大的进步呢。