【发布时间】:2023-04-09 03:18:02
【问题描述】:
我从很多人那里听说,C99 中引入的可变长度数组很糟糕。 IRC 上的一些人一分钟前说“我不认为 C++ 会获得 VLA,strosoup 对它们提出了一些非常负面的评价”。
那些人讨厌 VLA 的原因是什么?
【问题讨论】:
-
我听说这可能被视为一个巨魔问题。请不要以为是,我只是在寻找更喜欢 std::vector 之类的理由。
-
C11 甚至没有弃用 VLA 之类的吗?
-
@Xeo 不推荐使用,它们已成为可选的“可变长度数组是实现不需要支持的条件特性;参见 6.10.8.3。”。
-
@ChristianRau,C 标准中有几个部分是可选的,可以使用宏进行测试。我觉得没有什么令人震惊的。
-
"Making them mandatory would effectively prohibit C implementations on hardware with 9-bit bytes"这样的废话总结了为什么 ISO 标准糟糕,不允许它们偏爱某种技术。想象一下,如果严格指定字节大小和 int 类型大小,如果有符号整数始终是二进制补码,如果浮点数对每个浮点数表示都有指定的类型,如果 Unicode 是唯一允许的符号表等等,那么 C 会有多好。 ISO作为防火墙保护我们免受理智的技术改进的影响,他们做得非常好。
标签: c++ c c++11 c99 variable-length-array