std::string
typdef
forstd::basic_string<char>
であり、(basic_string
私のマシン上で) file で定義されています/usr/include/c++/4.4/bits/basic_string.h
。そのファイルには多くの間接性がありますが、大まかに言えばstd::string
、実際のデータへのポインターが格納されます
// Use empty-base optimization: http://www.cantrip.org/emptyopt.html
struct _Alloc_hider : _Alloc
{
_Alloc_hider(_CharT* __dat, const _Alloc& __a)
: _Alloc(__a), _M_p(__dat) { }
_CharT* _M_p; // The actual data.
};
これが、あなたがそのような行動を観察した理由です。このポインターは、既知の文字列プロパティ (実際のデータの直前にある) を記述する構造体へのポインターを取得するためにキャストされる場合があります。
struct _Rep_base
{
size_type _M_length;
size_type _M_capacity;
_Atomic_word _M_refcount;
};
_Rep* _M_rep() const
{ return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); }