定义一个长度等于vector :: size()的数组

时间:2018-08-12 07:14:42

标签: c++

我很惊讶下面的代码可以编译并显示正确的结果。

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    char arr[v.size()];  /* why does this line compile? */

    std::cout << sizeof(arr) / sizeof(arr[0]) << std::endl;  /* display 3 */

    return 0;
}

我相信在C / C ++中定义数组时必须使用恒定长度。 vector :: size()是在运行时确定的,为什么这样做有效?

1 个答案:

答案 0 :(得分:2)

首先,C / C ++是两种不同的语言。

C99定义了VLA(可变长度数组),但是在后续标准中已将其更改为可选。

C ++没有定义VLA。

因此,之所以进行编译,是因为您使用的扩展程序可能是GCC。那么严格来说,您的代码不符合C ++标准。

相关问题