c ++:“期望的常量表达式”

时间:2014-01-21 18:01:59

标签: c++ expression constants

我在以下代码的最后一行收到“预期的常量表达式”错误:

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)

任何帮助或洞察这里发生的事情将不胜感激:)

编辑:我意识到矢量可以解决这个问题。但是,我希望数组的内容在堆栈中。

4 个答案:

答案 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;
}

Example

请注意,这适用于我目前可以访问的最旧的编译器(g ++ 4.3.2)。

答案 3 :(得分:-1)

当试图声明一个数组时会发生“预期的常量表达式”错误。运行期间或执行期间的大小。 发生这种情况是因为编译器不能;首先,计算数组大小,然后将那么多空间分配给数组。 一个简单的解决方案是使用const int声明数组,例如 array [45]
另一种方法是创建一个动态数组:     int array_name = new int [size];