C++ 为什么VS要求数组大小为常量,而MinGW不要求?有办法解决吗?
我已经将我使用code::blocks编写的Mingw中的一些代码移植到visual studio及其编译器,它发现了许多错误,我的数组大小必须保持不变!为什么VS需要一个恒定的大小而mingw不需要 e、 g len变量用红色下划线表示这是一个错误,并表示“预期常量表达式” 我能想到的唯一办法就是C++ 为什么VS要求数组大小为常量,而MinGW不要求?有办法解决吗?,c++,visual-studio,mingw,C++,Visual Studio,Mingw,我已经将我使用code::blocks编写的Mingw中的一些代码移植到visual studio及其编译器,它发现了许多错误,我的数组大小必须保持不变!为什么VS需要一个恒定的大小而mingw不需要 e、 g len变量用红色下划线表示这是一个错误,并表示“预期常量表达式” 我能想到的唯一办法就是 char* szModiPath = new char[len]; delete[] szModiPath; 我是否必须将所有内容都更改为动态,或者在VS中是否有其他方式 为什么VS需要一个恒定的
char* szModiPath = new char[len];
delete[] szModiPath;
我是否必须将所有内容都更改为动态,或者在VS中是否有其他方式
为什么VS需要一个恒定的大小而mingw不需要
因为可变长度数组不是C++的一部分,尽管MinGW(g++)支持它们作为扩展。
数组大小必须是C++中的常量表达式。p>
<>在C++中,建议使用<代码> STD::vector < /COD>代替
char* szModiPath = new char[len];
delete[] szModiPath;
这不是“唯一的办法”。使用STL容器
#include <string>
....
std::string s;
s.resize(len);
#包括
....
std::字符串s;
s、 调整大小(len);
或
#包括
....
std::向量缓冲区(len);
s,我不认为C++代码中使用匈牙利符号是个好主意。
使用yAlLoCA从堆栈中分配变量,然后编写封装类。它很凌乱,但你可以编写自己的基于堆栈的可变长度数组。
碰巧我的例子是使用字符字符串,我也使用整数和类数组:p加上我在做windows编程,所以我更喜欢使用空终止字符串,这样我就可以将它们传递给windows api函数/调用,我认为std::string的.c_str()成员是常量,所以我不能总是将其传递给windows函数。@kaije:如果要将缓冲区传递给windows函数进行写入,向量仍然会自动进行内存管理,并且&vec[0]
会给您指向缓冲区的指针。如果你想避免动态分配,那么就使用windows定义的各种常量,比如MAX\u PATH
。@kaijethegreat:没有理由让自己处于需要手动释放某些内容的位置。使用一个容器,它会一直为你做,好吧,好吧,所以明文一直在愚弄我,认为它实际上是有效的C++代码!但事实并非如此,如果能够做到这一点,那将是有益的。。。
#include <vector>
....
std::vector<char> buffer(len);