TL;DR
メンバ変数に配列を持つ時、サイズの指定はstatic constexprを使えばいい。
class Manager
{
public:
Manager()
: m_item{0}
{};
private:
static constexpr int ITEM_NUM = 10;
int m_item[ITEM_NUM];
};
ダメな方法
メンバ変数を使う
- コンパイルエラーになる
class Manager
{
public:
Manager()
: m_item{0}
{};
private:
int ITEM_NUM = 10;
int m_item[ITEM_NUM];
};
constのメンバ変数を使う
- これもコンパイルエラー
class Manager
{
public:
Manager()
: m_item{0}
{};
private:
const int ITEM_NUM = 10;
int m_item[ITEM_NUM];
};
static constのメンバ変数を使う
- これはコンパイラによってはリンクエラーになるので、あまり良いとは言えない
- VisualStudioなどではエラーにならない
class Manager
{
public:
Manager()
: m_item{0}
{};
private:
static const int ITEM_NUM = 10;
int m_item[ITEM_NUM];
};
static constexprのメンバ変数を使う
- ということで、冒頭のとおり
static constexprを使えばいい
class Manager
{
public:
Manager()
: m_item{0}
{};
private:
static constexpr int ITEM_NUM = 10;
int m_item[ITEM_NUM];
};