我试图在C ++中声明一个int
数组并发现了这个问题。以下代码在g ++编译器上运行正常但在Visual Studio上编译失败。我跟随Bruce Eckel找到了这段代码。
#include<iostream>
int main()
{
const int j = std::cin.get();
char buf[j];
}
保持j
int
只是一个问题,我明白了。由于j
的值在运行期间是const,因此程序应该被编译。如果我在任何地方都错了,请纠正我。
答案 0 :(得分:3)
由于
j
的值在运行期间为const
,因此程序应该被编译。
不,const
j
- std::vector
与此无关。 C ++目前仅支持静态大小的C数组。它的大小必须是编译时常量。
如果您想要一个动态大小的数组,请使用-pedantic
。
默认情况下,g ++编译这个事实有点不幸(兼容性)。在使用g ++时你应该使用{{1}}标志来确保没有启用这样的编译器扩展(当然使用编译器扩展本身并不坏,但在这种情况下实际上没有任何优势)。
答案 1 :(得分:2)
可变长度数组是C99功能,gcc和clang支持它们作为C ++中的扩展,但Visual Studio从未做过,即使它们最近added support for C99是它not supported in C++
由于您使用 C ++ 进行开发,除非您有充分的理由不使用它,那么std::vector或std::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 ++专家)。