为啥我可以在 C++ 中定义这个可变长度数组? [复制]

Posted

技术标签:

【中文标题】为啥我可以在 C++ 中定义这个可变长度数组? [复制]【英文标题】:Why can I define this variable length array in C++? [duplicate]为什么我可以在 C++ 中定义这个可变长度数组? [复制] 【发布时间】:2014-09-16 12:40:37 【问题描述】:

给定

gcc -c main.C
gcc -lstdc++ -o main main.o

而 main.C 是

#include <iostream>

int main()  
    int somany; 
    std::cin >> somany; 
    double ex[somany]; 

    for(int i=0;i<somany;i++) 
            ex[i]=0.03; 
            std::cout << ex[i]; 
     

为什么这不会导致编译器错误?我以为 C++ 没有 VLA?

程序运行正常。

【问题讨论】:

这是一个 gcc 扩展。你是对的,它不在标准中。 用--pedantic编译以确保标准c++ 我怎样才能只针对 c++ 标准进行编译? gcc有一些标志吗? (我的 atm 无法使用 g++) @BeyelerStudios 比我快一秒,谢谢 ;) 如果有人知道如何使问题的标题更具体,请随时编辑。 【参考方案1】:

这是一个 GCC 扩展,与您使用 gcc 编译然后手动链接 C++ 标准库的方法没有任何关系。

--pedantic 编译标志通常会禁用此类扩展。

【讨论】:

以上是关于为啥我可以在 C++ 中定义这个可变长度数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Visual C++ 中启用 VLA(可变长度数组)?

为啥我可以进入 alloca:d 变量的范围,而不是可变长度数组?

c ++:使用模板在类中定义可变长度数组

在 C++ 中声明可变长度二维数组的正确方法

c++中有可变长度数组吗?

为啥 C++ 可以“填充”初始化一个可变大小的数组?