我试图解决这个问题,但我无法解决。我有一个类定义,我想要一个成员函数(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;
}
答案 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()];
}