C++ 当尝试从非常量大小初始化std::数组时,如何修复编译器错误
我知道我可以使用向量,但我不需要向量的额外特性,所以我想使用std::array。我的问题是,我从用户那里得到了数组的大小——从stdin。然后我知道大小,并从那里初始化数组 我尝试了以下代码,但得到了如图所示的编译器错误。我还用fsize尝试了constexpr 如何编辑代码,从编译时未知的大小创建std::数组C++ 当尝试从非常量大小初始化std::数组时,如何修复编译器错误,c++,templates,stdarray,C++,Templates,Stdarray,我知道我可以使用向量,但我不需要向量的额外特性,所以我想使用std::array。我的问题是,我从用户那里得到了数组的大小——从stdin。然后我知道大小,并从那里初始化数组 我尝试了以下代码,但得到了如图所示的编译器错误。我还用fsize尝试了constexpr 如何编辑代码,从编译时未知的大小创建std::数组 int main() { int size; cin >> size; const int fsize = size; // below line c
int main() {
int size;
cin >> size;
const int fsize = size;
// below line compile error
std::array<int, fsize> items;
}
如何编辑代码,从编译时未知的大小创建std::数组
int main() {
int size;
cin >> size;
const int fsize = size;
// below line compile error
std::array<int, fsize> items;
}
你不能std::array
是一个固定大小的数组,它的大小必须是编译时已知的常量
要创建在运行时才知道大小的动态数组,必须改用new[]
:
int *items = new int[fsize];
...
delete[] items;
std::unique_ptr<int[]> items(new int[fsize]);
最好使用std::vector
,它可以为您处理:
std::vector<int> items(fsize);
或
auto items=std::使_唯一(fsize);
你不能。模板非类型参数必须是编译时常量。请改用std::vector
:std::vector项(fsize)代码>必须在编译时确定std::array
的大小。如果您需要动态数组,std::vector
更可取。一般来说,模板生成的代码与程序的其余部分一起编译。如果编译器没有它需要的信息,它会告诉你。
auto items = std::make_unique<int[]>(fsize);