标准 C++ 不支持 C99 和 g++ 的可变长度数组 (VLA)。
在标准 C++ 中,您可以使用 eg std::vector
,如下所示(您的代码已修改):
#include <iostream>
#include <vector>
int main(){
int sz;
std::cout<<"number?\n";
std::cin>>sz;
// This line
std::vector<double> dynamic_arr( sz ); // Initialized to zeroes.
//output the value just to use the array.
std::cout<<dynamic_arr[0]<<std::endl;
}
此外,对于您可以使用的字符串std::basic_string
,通常通过typedef
sstd::string
和std::wstring
.
通常,主要问题只是动态大小,如上所述,然后很好地完成工作std::vector
。std::basic_string
但是,有时问题是效率,如何对动态大小的数组进行极其高效的堆栈分配。许多 C 和 C++ 实现为此支持非标准函数alloca
,但不幸的是,它们在处理故障的方式上存在很大差异。据我所知,也没有通用的图书馆解决方案。但令人高兴的是,我所知道的主要用途(尽管如前所述alloca
可用于许多平台)一直用于 Windows 中的字符串编码翻译,随着时间的推移,它的相关性越来越低,而且 Windows 程序越来越纯面向 Unicode。