使用static const + const作为数组绑定

MBo*_*ber 13 c++ arrays qnx

我正在做这样的事情

Class.hpp:

 class Class {

 private:
     static const unsigned int arraySize;
     int ar[arraySize+2];
 };
Run Code Online (Sandbox Code Playgroud)

Class.cpp:

#include <Class.hpp>
const unsigned int arraySize = 384;
Run Code Online (Sandbox Code Playgroud)

编译器(q ++,基于g ++的QNX OS的c ++编译器)error: array bound is not an integer constant在编译单元时给了我Class.hpp(包括编译Class.cpp时).

为什么不工作?我知道静态const成员可以用作数组绑定,由C++标准保证(请参阅此anwser).但是为什么编译器看不到static const + const作为常量的结果呢?

bro*_*ekk 13

这是编译器应该接受的好代码:

class Class { 
  const static int arraySize = 384; 
  int ar[arraySize+2]; 
}; 
Run Code Online (Sandbox Code Playgroud)

如果不是,你的编译器就坏了.

但是,如果将实际常量从头文件移动到选定的转换单元,则会使代码无效.

// Class.h
class Class { 
  const static int arraySize;
  int ar[arraySize+2]; // ERROR
}; 

// Class.cpp
const int Class::arraySize = 384;
Run Code Online (Sandbox Code Playgroud)

这是因为Class无法在编译时根据标题中可用的数据确定对象的大小.这不是完全正确的理由,但沿着这些线的推理有助于理解这样的编译错误.

为了避免犯这样的错误,你可以static const intenum,例如

class Class { 
  enum { arraySize = 384 }; 
  int ar[arraySize+2]; 
}; 
Run Code Online (Sandbox Code Playgroud)