对于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);
}
看到没,最终还是要判断长度先的