我在理解<<<<<<操作
如果我有:
#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;的功能体以这种方式纠正?
非常感谢您的任何解释。
答案 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