正在初始化数组
Initializing an array
我正在执行以下操作以初始化c++中的数组
int a;
cin>>a;
float b[a];
这在我的电脑中工作和编译。这是正确的吗?我想,只有当a是一个常量时,我们才能做到这一点。
取决于您对"正确"的定义。
这被称为可变长度数组(或只是VLA),在当前版本的C++中不受官方支持(对C++03及以前版本有100%的把握,对C++11有99.99%的把握),但它在C.中
某些编译器允许将其作为编译器扩展。
这不是关于a是否是常数int,而是关于a是否在组合时分配了初始值。编译器需要根据const int
值来分配存储。C++标准目前不支持可变长度数组。
在C99中,这种可变长度数组的语法是有效的,但C++标准说不。这是一个非常有用的功能,将所有毛茸茸的内存分配给编译器。
在GCC和Clang中,此功能作为编译器扩展得到支持,因此不会收到任何警告和错误。但MSVC编译器会放一条错误消息,上面写着cannot allocate an array of constant size 0
,所以它是编译器特定的。
支持此功能的编译器可能已使用new
运算符转换您的代码。
int a;
cin>>a;
float *b = new float[a];
这在C++标准中是有效的。
另一件事是,虽然它被称为可变长度数组,但它根本不是长度可变的。一旦定义了它,它的长度就是一个不变的常数值。你不能扩大或缩小它。
使用vector
容器要好得多,它确实是长度变量,并且具有更大的可扩展性和自适应性。
有关Why are';可变长度数组是C++标准的一部分吗?
相关文章:
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理