Why there is no compile error for the array definition with non-constant value?

后端 未结 2 2012
故里飘歌
故里飘歌 2020-12-21 05:39

I thought I should get compile error for the following char array definition of the allData:

void MyClass::aMethod(const char* data, int siz         


        
相关标签:
2条回答
  • 2020-12-21 06:08

    Some C++ compilers have an option that allows to use C VLA in C++.

    0 讨论(0)
  • 2020-12-21 06:30

    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. [...]

    0 讨论(0)
提交回复
热议问题