Both gcc and clang and possibly others although not visual C++, supports variable length arrays an extension even though it is a C99 feature not a C++ feature.
In both gcc
and clang
if you compile with -pedantic
they will warn you that you are using extensions, for example gcc
would produce a similar warning to this:
warning: ISO C++ forbids variable length array ‘allData’ [-Wvla]
and you can use -pedantic-errors
to turn the warning into an error.
As far as I understand C++14 may support variable length arrays. The C99 draft standard section 6.7.5.2
Array declarators says:
[...] If the size is an integer constant expression and the element type has a known constant size, the array type is not a variable length array type; otherwise, the array type is a variable length array type.
while the C++ draft standard requires a constant, the draft C++ standard in section 8.3.4
Arrays says:
In a declaration T D where D has the form
D1 [ constant-expressionopt] attribute-specifier-seqopt
[..] If the constant-expression (5.19) is present, it shall be a converted constant expression of type std::size_t and its value shall be greater than zero. [...]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…