В Visual Studio реализация type_info, обычно расположенная в C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\typeinfo:
class type_info {
/* ... */
_CRTIMP_PURE bool __CLR_OR_THIS_CALL operator==(const type_info& _Rhs) const;
/* ... */
private:
void *_M_data;
char _M_d_name[1];
__CLR_OR_THIS_CALL type_info(const type_info& _Rhs);
/* ... */
};
Я заметил, что реализация оператора равенства == использует указатель символа _M_d_name + 1. Может ли кто-нибудь объяснить мне, как это «работает», потому что кажется, что это выходит за пределы массива?
Реализация, C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\ti_inst.cpp:
ASSERT_UNMANAGED_CODE_ATTRIBUTE
SECURITYSAFECRITICAL_ATTRIBUTE
bool type_info::operator==(const type_info& rhs) const
{
return (strcmp((rhs._M_d_name)+1, (_M_d_name)+1)?0:1);
}
Спасибо!