为了账号安全,请及时绑定邮箱和手机立即绑定

C ++是否支持可变长度数组?

C ++是否支持可变长度数组?

C++
素胚勾勒不出你 2019-07-27 14:29:43
C ++是否支持可变长度数组?不,等等,忍受我...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吗?
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

这种余地措辞并不意味着C99中的任何内容都在C ++ 11中。你引用的只是介绍性文字。


查看完整回答
反对 回复 2019-07-27
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这个C99特性 C ++自己的语义有效地覆盖,可以是任何其他“继承”的特性:

[C++11: 8.3.4/1]:在具有表格的声明T DD

D1constant-expression opt ] attribute-specifier-seq opt

[..]

这是我们在C ++中给出的唯一数组声明语法。

请注意,“与C兼容”条款中未提及此差异C.1


查看完整回答
反对 回复 2019-07-27
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这为我编译:( g ++ 4.6 with -std=c++0x)。但它不能编译-pedantic(感谢@MarkB)。相反,它警告“ template.cpp:7:12:警告:ISO C ++禁止变长数组'n'[ - Wvla] ”

int main(int argc, char ** argv) {
    int n[argc];}

所以n编译时编译时无法知道大小。这是C ++的GNU扩展吗?这似乎是一个GNU扩展,并且VLA不是C ++ 11的官方部分。

(当然,我只是在玩一个编译器。所以用一点盐就可以了。)


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 819 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信