将成员函数之间的const变量传递为数组的索引

时间:2018-04-29 03:21:59

标签: c++ arrays class indexing const

我试图解决这个问题,但我无法解决。我有一个类定义,我想要一个成员函数(siz)将一个常量值返回给另一个成员函数(abc)。此值用作该函数中数组声明中的最大索引。但这似乎不起作用。这是一个简化版本:

class bin {
    constexpr int siz();
public:
    void abc();
};

constexpr int bin::siz() {
    const int sizz = sizeof(int) * 8;
}

void bin::abc() {
    char arr[siz()];   // compiler: this expression didn't evaluate as constant (¿?)
};

然而,其他非常相似的代码(但使用简单的函数)确实编译...

constexpr int siz() {
    const int sizz = sizeof(int) * 8;
    return sizz;
}

int main() {
    char arr[siz()];
    return 0;
}

1 个答案:

答案 0 :(得分:2)

我不完全确定,但我认为问题是在bin::abc中,对象可以是运行时的任何内容。因此,bin::siz()无法在编译时进行评估。

以下工作正常

int main()
{
   bin b;
   char arr[b.siz()];
}
bin更改为:

class bin {
public:
    constexpr int siz();
};

constexpr int bin::siz() {
    return sizeof(int) * 8;
}

如果siz不依赖于对象的状态,就像在发布的代码中一样,我建议将其设为static成员函数。

以下对我来说很好。

class bin {
  public:
    static constexpr int siz();
    void abc() const;
};

constexpr int bin::siz() {
  return sizeof(int) * 8;
}

void bin::abc() const {
  char arr[siz()];
}

int main()
{
  bin b;
  char arr[b.siz()];
}