我在以下代码的最后一行收到“预期的常量表达式”错误:
int main() {
const float a = 0.5f;
const float b = 2.0f;
int array_of_ints[int(a*b + 1)];
}
我想这是因为在编译期间int(a*b + 1)
未知,对吧?我的问题是:有没有办法对上面的示例进行编码以使其正常工作,而array_of_ints
的大小为int(a*b + 1)
?
任何帮助或洞察这里发生的事情将不胜感激:)
编辑:我意识到矢量可以解决这个问题。但是,我希望数组的内容在堆栈中。
答案 0 :(得分:6)
将两个常量声明为constexpr
(遗憾的是仅在C ++ 11之后可用):
int main() {
constexpr float a = 0.5f;
constexpr float b = 2.0f;
int array_of_ints[int(a*b + 1)];
}
或者(对于C + 11之前的C ++),您可以use an std::vector
。
答案 1 :(得分:2)
如果您不使用C ++ 11,请使用std::vector:
std::vector<int> array_of_ints(int(a*b + 1));
这将导致向量预先分配指定的空间,并将所有整数初始化为零。
答案 2 :(得分:2)
声明const int
:
int main()
{
const float a = 0.5f;
const float b = 2.0f;
const int s = static_cast<int>(a * b) + 1;
int array_of_ints[s];
return 0;
}
请注意,这适用于我目前可以访问的最旧的编译器(g ++ 4.3.2)。
答案 3 :(得分:-1)
当试图声明一个数组时会发生“预期的常量表达式”错误。运行期间或执行期间的大小。
发生这种情况是因为编译器不能;首先,计算数组大小,然后将那么多空间分配给数组。
一个简单的解决方案是使用const int声明数组,例如 array [45]
另一种方法是创建一个动态数组:
int array_name = new int [size];