【发布时间】:2012-01-25 11:46:27
【问题描述】:
不,等等,请耐心等待……
VLA 一直是 GCC 扩展,但被 C99 采用:
[C99: 6.7.5.2/4]:如果大小不存在,则数组类型为 不完整的类型。如果大小是 * 而不是表达式,则 数组类型是未指定大小的可变长度数组类型,它 只能在具有函数原型范围的声明中使用;这样的 数组仍然是完整的类型。 如果大小是整数 常量表达式并且元素类型具有已知的常量大小, 数组类型不是变长数组类型; 否则, 数组类型是变长数组类型。
C99 也称为ISO/IEC 9899:1999。
现在:
[C++11: 1.1/2]:C++ 是一种基于通用编程语言 在 ISO/IEC 9899:1999 中指定的 C 编程语言上 (以下简称C标准)。除了 C 提供的工具,C++ 提供了额外的数据类型、类、 模板、异常、命名空间、运算符重载、函数名 重载、引用、免费存储管理操作符,以及 额外的图书馆设施。
那么 C++11 不应该也有 VLA 吗?
【问题讨论】:
-
相关: stackoverflow.com/questions/1887097/variable-length-arrays-in-c (虽然我的问题实际上是关于从技术上说该功能首先不是从 C99 继承的;另一个是关于询问是否委员会可以明确地这样做)
-
无论如何,我认为“基于 C 编程语言”是内容丰富的文本。 “除了 C 提供的设施”是指“除了 C 提供的一些设施并且我们将其合并到 C++ 中”,而不是“哦,如果有什么来自 C 的东西我们忘记在下面的文本中提及,那就是在 C++ 中”;-)
-
@Steve:好的。也许我当时遇到的问题是假设 C 语言以及 C 标准库默认情况下是从 C99“继承”的。也许它只是库,而语言只是被引用作为设计的基础。
-
嗯,从 C 中获取的每个库函数都列在 C++ 标准中,引用 C99 标准说,“这个函数和那里的一样”,并且在一些案例“......具有以下区别”。所以我同意,没有批发继承,只是采摘 99% 的樱桃。
-
C99 VLA 与 GCC 的数组有不同的行为。 C99 没有采用 GCC 数组。
标签: c++ c++11 variable-length-array