我在Stack Overflow上的第一个问题:
我正在开发一个C ++程序,其中发生了我认为不起作用的事情。我的同事正在设置我们正在使用的某个类的元素myvec
。用户在调用程序时选择它的大小,因此编译时不会修复它!尽管如此,该代码还包括以下声明:
const unsigned myNumber = myvec.size();
bool valid_PDFplot[myNumber];
除非您使用动态分配的内存new
,否则我一直认为您无法定义编译时尚未知的大小数组?如上所述,在编译时不设置向量的大小,因为用户可以使用push_back
添加任意数量的元素。为什么上面显示的代码仍然有效?
答案 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];