C语言有一个非常酷的功能,叫做变长数组。它在C90及以上版本中可用,并允许推迟数组的大小到运行时确定。请参见GCC手册6.19 变长数组。
我正在使用C++。在std=c++11
下,由于在Cygwin下使用alloca
而导致编译失败。如果可能的话,我想切换到变长数组。我还想尝试避免使用std::vector
和std::array
,因为我想避免内存管理器。我相信每一点都有帮助,所以我很高兴抓住这些机会(有些人认为这是窥视孔)。
我能在C++03和C++11中使用变长数组吗?
C语言有一个非常酷的功能,叫做变长数组。它在C90及以上版本中可用,并允许推迟数组的大小到运行时确定。请参见GCC手册6.19 变长数组。
我正在使用C++。在std=c++11
下,由于在Cygwin下使用alloca
而导致编译失败。如果可能的话,我想切换到变长数组。我还想尝试避免使用std::vector
和std::array
,因为我想避免内存管理器。我相信每一点都有帮助,所以我很高兴抓住这些机会(有些人认为这是窥视孔)。
我能在C++03和C++11中使用变长数组吗?
VLA不符合C++03或C++11标准,因此如果您想编写严格符合标准的代码(并使用例如std::vector
,一般使用堆来存储数据-但您可以使用自己的分配器...),最好避免使用它们。
然而,一些C++编译器(如GCC和Clang)接受VLA作为扩展。
对于flexible array members,情况也是如此;它们在C++中不是标准的(只有在C中),但某些编译器接受它们。
dynarray-s没有进入C++11标准...
struct {unsigned length; double*array; };
的变体吗?也就是说,用double*array
代替了double array[]
? - Walter如果您想要符合标准的C++代码,那么不支持变长数组。
C++标准不支持VLA,但一些C++编译器作为供应商特定的扩展进行支持。
您可以使用标准的vector
在C++中实现类似的效果。请注意,与只能在创建时调整大小的VLA不同,标准的vector
可以根据需要重新调整大小(在执行适当的操作后)。
std::array
,因为这是C++ 11。 - jww