使用const整数声明一个数组

时间:2013-09-20 14:46:21

标签: c++ arrays const

我试图在C ++中声明一个int数组并发现了这个问题。以下代码在g ++编译器上运行正常但在Visual Studio上编译失败。我跟随Bruce Eckel找到了这段代码。

#include<iostream>

int main()
{
    const int j = std::cin.get();
    char buf[j];
}

保持j int只是一个问题,我明白了。由于j的值在运行期间是const,因此程序应该被编译。如果我在任何地方都错了,请纠正我。

4 个答案:

答案 0 :(得分:3)

  

由于j的值在运行期间为const,因此程序应该被编译。

不,const j - std::vector与此无关。 C ++目前仅支持静态大小的C数组。它的大小必须是编译时常量

如果您想要一个动态大小的数组,请使用-pedantic

默认情况下,g ++编译这个事实有点不幸(兼容性)。在使用g ++时你应该使用{{1}}标志来确保没有启用这样的编译器扩展(当然使用编译器扩展本身并不坏,但在这种情况下实际上没有任何优势)。

答案 1 :(得分:2)

可变长度数组是C99功能,gccclang支持它们作为C ++中的扩展,但Visual Studio从未做过,即使它们最近added support for C99是它not supported in C++

由于您使用 C ++ 进行开发,除非您有充分的理由不使用它,那么std::vectorstd::string就足够了。

答案 2 :(得分:2)

您正尝试将buf定义为variable-length array。这是g++作为非标准扩展支持的C(非C ++)的一个特性。显然你的其他编译器不支持它。

我建议将buf转为std::vector<char>(或确实是std::string?)

答案 3 :(得分:0)

我遇到了同样的问题。创建一个长度存储为变量的数组似乎非常困难。我所做的是创建一个额外的功能:

void Class:: initMyArray(const int size) {
    myArray = new int[size]
}

现在,您只需要调用该函数并将其赋予变量即可。我不确定这是否是一个合适的解决方案(我不是C ++专家)。