将std :: endl发送到stream会给出内存地址

时间:2015-07-04 04:42:10

标签: c++ stream 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;

}

它是由main()中的std :: endl引起的,但为什么??

输出:

word
0x804a064

1 个答案:

答案 0 :(得分:3)

您的函数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;