我很惊讶下面的代码可以编译并显示正确的结果。
#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()是在运行时确定的,为什么这样做有效?
答案 0 :(得分:2)
首先,C / C ++是两种不同的语言。
C99定义了VLA(可变长度数组),但是在后续标准中已将其更改为可选。
C ++没有定义VLA。
因此,之所以进行编译,是因为您使用的扩展程序可能是GCC。那么严格来说,您的代码不符合C ++标准。