C++ 定义长度等于vector::size()的数组

C++ 定义长度等于vector::size()的数组,c++,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

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

#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;
}
#包括
#包括
int main()
{
std::向量v;
v、 推回(1);
v、 推回(2);
v、 推回(3);
char arr[v.size()];/*为什么要编译这一行*/

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

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

C++没有定义VLA


因此,编译时使用的是具有扩展名的编译器,可能是GCC。严格地说,您的代码不是C++标准兼容的。

它在C11中是可选的,而不是被删除。@ VTT多谢,changed@vtt是的,该是该标准强制使用此功能的时候了imo@Jean-巴普蒂斯特:谢谢!我没有意识到即使我在那里使用了一个常态int变量,它仍然会在C++中编译。添加Wvla之后,它会显示警告。