Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > не понимаю что выводится на консоль


Автор: slutsker 17.7.2007, 08:11
при выполнении:
Код

int i;
    ifstream d("c:/test/1.txt");
    cout<<(d>>i);

получаю: 0012ff18
а если 
Код

int i;
    ifstream d("c:/test/1.txt");
            d>>i
    cout<<i;

выводится число из файла

объясните пожалуйста откуда берется 0012ff18 в первом случае!

Автор: jonie 17.7.2007, 08:25
Цитата

Код

int i;
    ifstream d("c:/test/1.txt");
    cout<<(d>>i);

это раскрывается в 
Код

cout.operator<<(d>>i)

что раскрывается в
Код

cout.operator<<(d.operator>>(i))

тип возрата у d.operator>>() есть ifstream&. Вот его и выводит (ссылка есть тоже что указатель фактически, т.е. выводится адресс объекта типа ifstream).

Автор: archimed7592 17.7.2007, 11:39
 smile 
Выводится вовсе не адрес объекта ifstream.
Никогда не задумывались, почему конструкция
Код
if(d) ...
будет работать? smile
Потому, что объекты этого типа неявно преобразуются в другой тип, который convertible to bool.
Как правило это void * или C::*.
Т.о. выводится то значение, которое получается при неявном преобразовании d к "чему-то". К чему не специфицированно. Гарантируется лишь то, что это "что-то" будет неявно преобразовываться к bool и после такого преобразования иметь значение true, если поток жив и false, если произошла ошибка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)