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

Why can I set the size of an array equal to the (unknown) size of a vector?

本问题已经有最佳答案,请猛点这里访问。

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

我正在C语言程序上工作,但发生某些我认为不起作用的事情。我的同事正在建立我们正在处理的某个类的元素的向量myvec。它的大小由用户在调用程序时选择,因此在编译时它不是固定的!但是,该代码包含有效的以下语句:

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

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


之所以被接受是因为您的编译器将可变长度数组实现为扩展。 (VLA于1999年引入标准C,并于2011年成为可选。它们从未添加到标准C中。)

如果使用的是gcc,则-pedantic编译器选项将使其拒绝声明。

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