C++ string 存储的潜规则

对于c++ 标准库里的string(或wstring)

存储字符串是有潜规则的

先看看_Bx这玩意

   union _Bxty
        {    // storage for small buffer or pointer to larger one
        _Elem _Buf[_BUF_SIZE ];
        _Elem *_Ptr;
        char _Alias[_BUF_SIZE ];    // to permit aliasing
        } _Bx;

 

而_BUF_SIZE为

    enum
        {    // length of internal buffer, [1, 16]
        _BUF_SIZE = 16 / sizeof (_Elem) < 1 ? 1
            : 16 / sizeof (_Elem)};

当字符串长度小于默认的_BUF_SIZE时用_Bx._Buf

而默认的_BUF_SIZE一般为16(实际上_Bx._Buf存储15个而已)

大于这默认值才给_Bx._Ptr分配内存

在小于_BUF_SIZE的情况下直接调用_Bx._Ptr程序会挂掉的

空指针嘛。。。

看看成员函数c_str()

    const _Elem *c_str() const
        {    // return pointer to null-terminated nonmutable array
        return (_Myptr());
        }

    const _Elem *_Myptr() const
        {    // determine current pointer to buffer for nonmutable string
        return (this->_BUF_SIZE <= this->_Myres ? this->_Bx._Ptr
            : this->_Bx._Buf);
        }
看到没,最终还是要判断长度先的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值