C++:"expected constant expression"

c++: "expected constant expression"

本文关键字:expression constant expected C++      更新时间:2023-10-16

我在以下代码的最后一行中遇到了"预期恒定表达式"错误:

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)

对这里发生的事情的任何帮助或见解将不胜感激:)

编辑:我意识到向量将解决此问题。但是,我希望数组的内容在堆栈上。

将两个常数声明为 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 ),您可以使用std::vector

声明 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)。

如果您不使用C 11,则使用std :: vector:

std::vector<int> array_of_ints(int(a*b + 1));

这将导致向量预先分配指定的空间,并将所有ints初始化为零。

当试图在运行时或执行过程中声明数组的大小时,就会发生"预期常数表达式"错误。发生这种情况是因为编译器不能;首先,计算阵列大小,然后将这么多空间分配给数组。一个简单的解决方案是用const int声明数组另一种方法是制作一个动态数组: int array_name = new int [size];

相关文章: