2016-07-03 15 views
-1

Мое первое понимание заключается в том, что cout указывает на вывод терминала, но я не знаю, правильно ли это.Почему «cout << cout» выводит адрес?

Возможно, это какой-то адрес памяти, который не является выходом терминала, но он подключен к нему.

Я смущен, любые разъяснения были бы весьма признательны.

EDIT:

Когда я std::cout << std::cout; Выход 0x467f84, что это адрес, верно?

+2

Пожалуйста, добавляйте код, который вы использовали, чтобы найти это поведение. Также добавьте информацию об ОС и компиляторах. –

+2

[Нет воспроизведения] (http://coliru.stacked-crooked.com/a/5bf0e1f8affab64b) –

+0

Используя g ++, я получаю поведение, описанное в названии, поэтому я добавил это как код; не стесняйтесь возвращаться (он был возвращен) ... –

ответ

5

До C++ 11 std::basic_ios имел неявный type conversion function to void*, чтобы иметь возможность использовать поток в качестве условия.

GCC перед версией 5 не строится в режиме C++ 11, если не используется специальный флаг, а это означает, что при выводе потока будет использоваться operator<< overload, принимающий void*, что приведет к вашему поведению.

Если вы построили в режиме C++ 11 или более поздней версии, используя флаг -std=c++11, тогда вы должны получить для него ошибку компилятора.