怎么<<操作员到底工作?

时间:2014-12-31 17:06:07

标签: c++

我在理解<<<<<<操作

如果我有:

#include <iostream>
using namespace std;
//...

int t = 5;
cout << "test is: " << t << endl;

现在函数运算符&lt;&lt;叫做。

ostream& operator<<(ostream& out, string* s)
{
    return out << s << endl;
}


ostream& operator<<(ostream& out, int* value)
{
    return out << value << endl;
}

字符串指针指向值 test的地址:但是元素out引用的是什么(cout?)?并且是ostream&amp;的功能体以这种方式纠正?

非常感谢您的任何解释。

3 个答案:

答案 0 :(得分:1)

首先,让我们修复你的代码:运算符应该使用const引用或值而不是指针:

ostream& operator<<(ostream& out, const string& s) // const reference
ostream& operator<<(ostream& out, int i)           // value

现在问题:你是对的,out参数接收cout的引用,或ostream&从{{{}左侧的表达式返回的<<的引用1}}。 <<左侧的表达式不一定是cout - 其他常见情况是其他<<运算符 * 用于链接和流操作符的结果。在所有情况下,这些表达式都会返回对ostream的引用,以便“链”可以继续。

* operator<<返回ostream&的原因是您可以链接输出。在绝大多数情况下,你将返回与第一个参数相同的ostream&,尽管对标准C ++库的要求你没有限制。

答案 1 :(得分:0)

事实并非如此。它的int不是int*char const*不是string*

当然,

out在此示例中引用std::cout。还有什么呢?

没有那些身体丝毫不正确 - 他们试图无限地重新振作起来,别无其他。

答案 2 :(得分:0)

int t = 5;
cout << "test is: " << t << endl;

第一个电话会是: -

ostream& operator<<(ostream& out, const char* str)

out = cout

str =&#34;测试是:&#34;

第二次调用将应用于第一次调用返回的对象ostream

ostream& operator<<(ostream& out, int x)

out = cout

x = t