Lig*_*ica 33 c++ variable-length-array c++11
不,等等,忍受我...
VLA一直是GCC扩展,但它们被C99采用:
[C99: 6.7.5.2/4]:
如果大小不存在,则数组类型是不完整类型.如果大小是*而不是表达式,则数组类型是未指定大小的可变长度数组类型,只能在具有函数原型范围的声明中使用; 尽管如此,这些数组仍然是完整类型.如果size是一个整型常量表达式,并且元素类型具有已知的常量大小, 则数组类型不是可变长度数组类型; 否则,数组类型是可变长度数组类型.
C99也称为ISO/IEC 9899:1999
.
现在:
[C++11: 1.1/2]:
C++是基于ISO/IEC 9899:1999(以下称为C标准)中规定的C编程语言的通用编程语言.除了C提供的功能之外,C++还提供其他数据类型,类,模板,异常,命名空间,运算符重载,函数名称重载,引用,免费存储管理操作符和其他库设施.
那么C++ 11也不应该有VLA吗?
Lig*_*ica 13
这个C99特性被 C++自己的语义有效地覆盖,可以是任何其他"继承"的特性:
[C++11: 8.3.4/1]
:在具有表格的声明T D
中D
D1
[ constant-expression opt ] attribute-specifier-seq opt[..]
这是我们在C++中给出的唯一数组声明语法.
请注意,"与C兼容"条款中未提及此差异C.1
.
对于两种语言,constant-expression的定义是不同的.
const size_t size = 5;
int array[size]; // array in C++, VLA in C
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17083 次 |
最近记录: |