我可以在 C++03 和 C++11 中使用 C 可变长度数组吗?

Can I use a C Variable Length Array in C++03 and C++11?

C 有一个非常酷的特性,称为可变长度数组。它在 C90 及更高版本中可用,并且允许将数组的大小推迟到运行时。请参阅 GCC 手册 6.19 Arrays of Variable Length

我正在使用 C++。在 std=c++11,由于在 Cygwin 下使用 alloca,我发现编译失败。如果可能的话,我想切换到可变长度数组。我也想尝试避免 std::vectorstd::array 因为我想远离内存管理器。我相信一点点帮助,所以我很高兴抓住这些机会(有些人认为是窥视孔)。

我可以在 C++03 和 C++11 中使用可变长度数组吗?

VLAs 不在标准 C++03 或 C++11 中,所以如果你想编写严格符合标准的代码(并使用例如 std::vector,你最好避免使用它们,它通常使用堆来存储数据——但您可以使用自己的分配器...)。

但是,一些 C++ 编译器(最近 GCC & Clang)正在接受 VLA 作为扩展。

flexible array members也一样;它们在 C++ 中不是标准的(仅在 C 中)但一些编译器接受它们。

dynarray-s没有进入C++11标准...

如果您想要标准 C++ 代码,则不需要。

没有 C++ 标准支持 VLA,但一些 C++ 编译器作为特定于供应商的扩展支持。

您可以使用标准 vector 在 C++ 中实现类似的效果。请注意,与只能在创建时调整大小的 VLA 不同,标准 vector 可以根据需要调整大小(取决于对其执行适当的操作)。