C++ c+中不带大小语法的数组+;

C++ c+中不带大小语法的数组+;,c++,syntax,C++,Syntax,我找到了这个密码 class item : public slab_item_base { version_type _version; hook_type _cache_link; bi::list_member_hook<> _timer_link; size_t _key_hash; expiration _expiry; uint32_t _value_size; uint32_t _slab_page_index;

我找到了这个密码

class item : public slab_item_base {
    version_type _version;
    hook_type _cache_link;
    bi::list_member_hook<> _timer_link;
    size_t _key_hash;
    expiration _expiry;
    uint32_t _value_size;
    uint32_t _slab_page_index;
    uint16_t _ref_count;
    uint8_t _key_size;
    uint8_t _ascii_prefix_size;
    uint32_t _value_size;
    char _data[]; // layout: data=key, (data+key_size)=ascii_prefix, (data+key_size+ascii_prefix_size)=value.
public:
    item(uint32_t slab_page_index, item_key&& key, sstring&& ascii_prefix,
         sstring&& value, expiration expiry, version_type version = 1)
        : _version(version)
        , _key_hash(key.hash())
        , _expiry(expiry)
        , _value_size(value.size())
        , _slab_page_index(slab_page_index)
        , _ref_count(0U)
        , _key_size(key.key().size())
        , _ascii_prefix_size(ascii_prefix.size())
    {
        assert(_key_size <= std::numeric_limits<uint8_t>::max());
        assert(_ascii_prefix_size <= std::numeric_limits<uint8_t>::max());
        // storing key
        memcpy(_data, key.key().c_str(), _key_size);
        // storing ascii_prefix
        memcpy(_data + align_up(_key_size, field_alignment), ascii_prefix.c_str(), _ascii_prefix_size);
        // storing value
        memcpy(_data + align_up(_key_size, field_alignment) + align_up(_ascii_prefix_size, field_alignment),
               value.c_str(), _value_size);
    }
....
}
类项目:公共楼板项目基础{
版本\类型\版本;
钩子类型缓存链接;
bi::列表\成员\挂钩\计时器\链接;
大小\u t\u键\u散列;
到期(即到期);;
uint32_t_值_尺寸;
uint32_t_slab_page_索引;
uint16\u t\u参考计数;
uint8_t_键尺寸;
uint8_t_ascii_前缀_大小;
uint32_t_值_尺寸;
char _data[];//布局:数据=键,(数据+键大小)=ascii前缀,(数据+键大小+ascii前缀大小)=值。
公众:
项目(uint32板、页面索引、项目键和键、字符串和ascii前缀、,
S字符串和值,过期,版本\类型版本=1)
:(版本)
,_key_hash(key.hash())
,_到期日(到期日)
,\u value\u size(value.size())
,_slab_page_index(slab_page_index)
,参考计数(0U)
,_key_size(key.key().size())
,_ascii_前缀_大小(ascii_前缀.size())
{

在C中,这是一个“灵活数组成员”。在C++中,它是被禁止的(但是一些编译器允许它)它允许您分配一个结构,并指定一个任意数量的额外空间用于该数组。与 MalOC/相当好地工作,与<代码>新< /代码>不太好。注意<代码>数据DAT/<代码>是结构中的最后一个字段。在C++中,这种结构是可用的;还有一个成员不是普通的C类型,需要重新放置。