C++ 为什么这个代码不起作用?为什么我需要返回类型作为引用?

C++ 为什么这个代码不起作用?为什么我需要返回类型作为引用?,c++,C++,我需要知道里面发生了什么,如果返回类型不是引用,为什么它不起作用。我需要一些关于istreams和ostreams的好文章的链接,帮助我理解它们。不要太复杂的文章。谢谢 更新1:请记住分享文章的链接,这样我可以了解更多关于ostream和istream对象的信息。谢谢。ostream不是可复制类型。ostream不是可复制类型。因为ostream是不可复制类。这是经过设计的,就像线程和其他不可复制的概念一样。因为ostream是不可复制的类。这是经过设计的,就像线程和其他不可复制的概念一样。返回

我需要知道里面发生了什么,如果返回类型不是引用,为什么它不起作用。我需要一些关于istreams和ostreams的好文章的链接,帮助我理解它们。不要太复杂的文章。谢谢


更新1:请记住分享文章的链接,这样我可以了解更多关于ostream和istream对象的信息。谢谢。

ostream不是可复制类型。

ostream不是可复制类型。

因为ostream是不可复制类。这是经过设计的,就像线程和其他不可复制的概念一样。

因为ostream是不可复制的类。这是经过设计的,就像线程和其他不可复制的概念一样。

返回类型必须是对同一流操作系统的引用,以便将调用链接在一起。例如:

ostream operator<<(ostream& os, class n);   

如果不是引用,则返回类型将是一个值。每个值都是一个不同的流,所以hello和world会去不同的地方。所有引用都引用相同的流,因此hello和world将输出到相同的位置。

返回类型必须是对相同流操作系统的引用,以便将调用链接在一起。例如:

ostream operator<<(ostream& os, class n);   
如果不是引用,则返回类型将是一个值。每个值都是一个不同的流,所以hello和world会去不同的地方。所有引用都引用相同的流,因此hello和world将输出到相同的位置。

std::ostream的复制构造函数是私有的,这意味着您无法创建流对象的副本

每个流都有一个相关的底层缓冲区,用于处理读/写操作,例如filebuf管理对文件的读/写操作。如果要制作流的副本,您打算如何处理这个底层缓冲区?您不能复制它,因为这样您将有两个缓冲区维护单独的位置信息-例如,它的写入位置-想象一下大破坏。。。如果移动它(即转移所有权),如果复制到某个作用域流中,很可能会丢失缓冲区,比如说,将其按值传递给函数,而不返回它,那么会发生什么?对于这些复杂情况,将此对象设置为不可复制是有意义的…

std::ostream的复制构造函数是私有的,这意味着您无法创建流对象的副本


每个流都有一个相关的底层缓冲区,用于处理读/写操作,例如filebuf管理对文件的读/写操作。如果要制作流的副本,您打算如何处理这个底层缓冲区?您不能复制它,因为这样您将有两个缓冲区维护单独的位置信息-例如,它的写入位置-想象一下大破坏。。。如果移动它(即转移所有权),如果复制到某个作用域流中,很可能会丢失缓冲区,比如说,将其按值传递给函数,而不返回它,那么会发生什么?对于这样的复杂情况,将此对象设置为不可复制是有意义的…

通常当您覆盖运算符时通常当您覆盖运算符时,但我不想进行链调用。我只是想知道为什么我不能用那个接线员来做这样的事情:coutyes,但我不想打连锁电话。我只是想知道为什么我不能用那个操作符做这样的事情:能理解里面发生了什么??请给我一个更多的答案:里面发生了什么??请我需要一个更多的noob回答:但是我在哪里复制ostream??在我试图复制的函数中的何处??我是一个初学者,我需要一步一步的解释。@jose,在返回中,当你返回时,根据你的声明会发生什么,一个临时的ostream对象是用你返回的ostream构造的。我猜你知道当你通过引用而不是值传递ostream时会发生什么吗?反过来想想返回…嗯,所以每次我从函数返回某个对象时。该对象的构造函数被精确地称为复制构造函数。但是要小心,你也不能总是返回引用,也就是说,你不能通过引用返回该函数的本地对象——当你超出范围时,该对象实际上超出了范围,你的引用可能会访问垃圾。我建议您重读C++书籍,仔细查看函数和函数返回结果。@若泽,因为当您通过值或返回值时,实际上正在创建对象的副本,通常在C++中,通过复制构造函数创建副本。你真的需要回到C++的书中,可以从理解不同类型的构造函数的目的开始。创建一个更简单的示例,并在其中返回一些对象foo,实现foo的复制构造函数,然后看看当您
按值或引用旋转。但我在哪里复制ostream??在我试图复制的函数中的何处??我是一个初学者,我需要一步一步的解释。@jose,在返回中,当你返回时,根据你的声明会发生什么,一个临时的ostream对象是用你返回的ostream构造的。我猜你知道当你通过引用而不是值传递ostream时会发生什么吗?反过来想想返回…嗯,所以每次我从函数返回某个对象时。该对象的构造函数被精确地称为复制构造函数。但是要小心,你也不能总是返回引用,也就是说,你不能通过引用返回该函数的本地对象——当你超出范围时,该对象实际上超出了范围,你的引用可能会访问垃圾。我建议您重读C++书籍,仔细查看函数和函数返回结果。@若泽,因为当您通过值或返回值时,实际上正在创建对象的副本,通常在C++中,通过复制构造函数创建副本。你真的需要回到C++的书中,可以从理解不同类型的构造函数的目的开始。创建一个更简单的示例,在其中返回一些对象foo,实现foo的复制构造函数,并查看按值或引用返回时会发生什么。@jose:按值返回对象时,函数的返回值是所返回内容的临时副本。这里有一个相当可读的比较,比较了按值复制返回、按引用返回和按地址指针返回之间的区别:注意:我还没有深入研究教程;我对网站的整体质量没有任何要求。@jose:当你按值返回一个对象时,函数的返回值是你返回的任何内容的临时副本。这里有一个相当可读的比较,比较了按值复制返回、按引用返回和按地址指针返回之间的区别:注意:我还没有深入研究教程;我对网站的整体质量没有任何要求。微软网站上有一些关于iostream编程的信息,谢谢。我会查的。微软网站上有一些关于iostream编程的信息,谢谢。我要检查一下。
ostream& operator<<(ostream& os, class n)
{
    os << n.some_data() << n.some_other_data(); 

    return os;
}
n myclass;
std::cout << myclass << std::endl;