当使用cout和cin时,"<<"和">>"运算符在做什么,我们为什么要使用它们?
When using cout and cin, what are the "<<" and ">>" operators doing and why do we use them?
例如:
int age;
cin >> age;
cout << "You are " << age << " years old!" << endl;
为什么我们在这里使用"<<"和">>"运算符?他们在做什么?我有点理解位移,但我不明白这里是如何工作的。
它们被称为流插入运算符(<<
)和流提取运算符(>>
)。
这些运算符与左位移运算符和右位移运算符相同(即使它们具有不同的名称)。位移运算符是重载的,因此当左侧是流时,它们读取或写入该流。
它们就像任何函数调用一样 - 它的工作原理如下:
leftShift(leftShift(leftShift(leftShift(cout, "You are "), age), " years old!"), endl);
除了该函数被调用operator<<
而不是leftShift
。
严格来说,没有理由称为leftShift
的函数必须进行左移,同样,称为operator<<
的函数也没有理由必须进行左移。
>>
和<<
已作为流函数重载,例如:
std::ostream & operator << (std::ostream &, int)
(及其他)
因此(在本例中)当使用 cout <<10 时,它会调用将打印值的重载函数。
它与位移无关,只是它使用相同的运算符"<<"和">>"。
这是运算符重载。位移运算符被重载,以便流类用于不同的目的(读取和写入流)。请参阅:http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中