【发布时间】:2019-12-28 08:19:15
【问题描述】:
为什么下面的代码sn-p编译没有错误:
void func(){
const int s_max{ 10 };
int m_array[s_max]{0};
}
int main() {
const int s_max{ 10 };
int m_array[s_max]{0};
return 0;
}
但是当我尝试在类范围内定义相同的数组时,出现以下错误:
class MyClass
{
const int s_max{ 10 };
int m_array[s_max]{0}; // error: invalid use of non-static data member 's_max'
};
为什么s_max 需要在班级中成为static?
我在其他类似帖子中找不到我的问题的令人信服的答案。
【问题讨论】:
-
数组的长度必须是常量表达式,
const是必需的,但对于常量表达式是不够的。 -
我有一个坏消息:即使第一个 sn-p “编译没有错误”,它也不是有效的 C++。您的编译器只是在帮您一个忙,并允许使用非标准 C++ 的内容。
-
@SamVarshavchik 我认为第一种情况应该没问题;
s_max是 constant expression。 具有整型或枚举类型,指的是一个完整的非易失性const对象,用常量表达式初始化
标签: c++ arrays class constants