отправка std :: endl в поток дает адрес памяти

Может кто-нибудь объяснить мне, почему эта программа отправляет адрес в std :: cout?

#include<string>
#include<iostream>
#include<fstream>std::ostream& stuff(std::ostream& o, std::string s)
{
o << s << std::endl;
return o;
}

int main(){

std::cout << stuff(std::cout, "word") << std::endl;

}

Это вызвано std :: endl в main () .. но почему ??

выход:

word
0x804a064

1

Решение

Ваша функция stuff возвращает std::ostream это было передано в это.

Это означает, что ваш код:

std::cout << stuff(std::cout, "word") << std::endl;

На самом деле позвонит:

std::cout << (std::cout) << std::endl;
^^^^^^^^^^^ this is the result of calling "stuff"

Вы выводите адрес своего std::cout объект.

Ваша программа функционально эквивалентна:

std::cout << "word" << std::endl;
std::cout << std::cout << std::endl;
3

Другие решения


По вопросам рекламы [email protected]