cout << cout
эквивалентно cout << cout.operator void *()
.Эта идиома использовалась до C ++ 11 для определения того, находится ли iostream в состоянии сбоя и реализован ли в std::ios_base
;обычно он возвращает адрес static_cast<std::ios_base *>(&cout)
.
cout << &cout
печатает адрес cout
.
Поскольку std::ios_base
является виртуальным базовым классом cout
, он не обязательно может быть смежным с cout
.Вот почему он печатает другой адрес.