为什么我可以将数组的大小设置为等于向量的(未知)大小?

时间:2016-01-12 16:27:48

标签: c++ arrays vector

我在Stack Overflow上的第一个问题:

我正在开发一个C ++程序,其中发生了我认为不起作用的事情。我的同事正在设置我们正在使用的某个类的元素myvec。用户在调用程序时选择它的大小,因此编译时不会修复它!尽管如此,该代码还包括以下声明:

    const unsigned myNumber = myvec.size();
    bool valid_PDFplot[myNumber];

除非您使用动态分配的内存new,否则我一直认为您无法定义编译时尚未知的大小数组?如上所述,在编译时不设置向量的大小,因为用户可以使用push_back添加任意数量的元素。为什么上面显示的代码仍然有效?

1 个答案:

答案 0 :(得分:2)

它已被接受,因为您的编译器将可变长度数组实现为扩展。 (VLAs于1999年引入标准C,并于2011年推出。它们从未被添加到标准C ++中。)

如果您正在使用gcc,-pedantic编译器选项将导致它拒绝声明。

c.cpp: In function 'int main()':
c.cpp:6:32: warning: ISO C++ forbids variable length array 'valid_PDFplot' [-Wvla]
     bool valid_PDFplot[myNumber];