定义没有大小或零大小的数组

Vis*_*rma 2 c++ c++11

我偶然发现下面的代码令我感到困惑:

union
{
    struct
    {
        uint32_t Id;
        uint8_t a_data[];
    }vendor;
    uint8_t avp[0];
}data;
Run Code Online (Sandbox Code Playgroud)

这与g ++ 7.2.1编译良好,但我无法理解为什么.在定义a_data时如何不需要提供大小?如何将avp的大小调整为零?

Som*_*ude 5

这是一个灵活的阵列成员,从技术上讲,它不是C++的一部分(它只是一个C-only功能).

一些编译器(尤其是GCC)很乐意将C中的功能添加为C++的扩展.因此它不可移植,你应该尽可能避免这样的代码.