c++ - 发送 std::endl 到流给出内存地址

标签 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

最佳答案

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

关于c++ - 发送 std::endl 到流给出内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216969/

相关文章:

c++ - 将二进制表示形式的数字减少到 1 的步骤数

c++ - 在注入(inject)的 DLL 中调用函数?

javascript - 如何在保持顺序的同时进行并发 Node.js 流处理?

c# - 我们如何在 C# 中添加一个新行

c++ - 有谁知道 endl(cout) 和 cout << endl 之间的区别?

c++ - 如何实现最简单的 C++ 可调用对象包装器?

java - ASN1解码器(libtasn1-3.3)打印DD证书pem的内容

MongoDb 在 NestJs 中的变更流

c# - 将系统剪贴板作为流而不是字符串读取

C++ cout.endl() 清除缓冲区,cout.flush() 不