在C ++中,直到运行时才知道数组的大小,我想为数组分配内存。
我经常使用常量(编译时)分配。但希望通过运行时分配朝着“始终”前进。实际上,我通过声明放弃了“隐式”分配。(我用术语来表示发生的事情。)我不知道它到底是什么,以及它为什么起作用。我认为这是一个故事的摘要:
std::ifstream infile;
infile.open("input_info");
if (infile.is_open()) {
infile >> number;
std::cout << number << " " << std::endl;
}
std::pair<int, int> incident_subdomains[number];
int sd[number][2];
那是; 在读取所需数组的大小后,我声明了数组identity_subdomains和sd。然后,我在后续代码中使用这些数组;例如,从“ input_info”中读取信息以填充数组。该程序已编译并运行。这是C ++的新功能吗?我喜欢。(我使用过“ new”和“ vector”。)我正在使用的c ++编译器是g ++ 7.3.0。
我不知道它到底叫什么
可变长度数组。
这是C ++的新功能吗?
不可以。这不是标准C ++的功能。在C ++中,非动态分配的数组的大小必须是编译时间常数。
以及为什么有效
大概是因为它是编译器提供的语言扩展。它是C99(以及可选的C11)中的一项功能,因此某些也符合C99的C ++编译器(对于C ++编译器也是C编译器,这是很常见的)很可能具有此功能。这就是GCC对您的程序的评价:
warning: ISO C++ forbids variable length array 'incident_subdomains' [-Wvla]
当C说:
warning: variable length arrays are a C99 feature [-Wvla-extension]
在标准C ++中创建动态大小的数组的最简单方法是使用std::vector
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句