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];
};