“operator<<”被称为什么?

25
我知道大多数运算符的名称,但不确定 operator<<operator>> 的叫法。
例如:
operator=() // the assignment operator
operator==() // the equality of comparison operator
operator++() // the increment operator
operator--() // decrement operator etc.
operator<() // the less-than operator

等等之类的东西...


31
我喜欢称它们为“<<”和“>>”,但发音对有些人来说有点困难。 - Eric Petroelje
1
关于iostream头文件,<< 是提取运算符。(>> 是插入)。非常淘气。 - Agnel Kurian
2
远小于和远大于 - jk.
遗憾的是,这个否则全面的参考资料对此事保持沉默... http://oops.se/~urban/pit/intercal.ps - Brian Hooper
4
@Vulcan:实际上不是反过来吗? - fredoverflow
8个回答

42

<<既是插入运算符,又是左移运算符。
>>是提取运算符和右移运算符。

在iostreams的上下文中,它们被认为是流插入/提取运算符。 在位移的上下文中,它们是左移和右移运算符。


3
你做了一个重要的区分。运算符的名称会根据它被使用的方式(更重要的是,它被用于何种类型的数据)而发生变化。由于这种特殊性质,我听说 <<>> 符号被称为“双左”和“双右”符号,作为一种通用的引用符号的方式(类似于你可以称 + 为 "加" 或 / 为 "斜杠",不管它们如何被重载),但这并不是官方的。 - bta

21
在C++流中,
  • << 是插入运算符。
  • >> 是提取运算符。
在二进制操作中,
  • 右移 (>>)
  • 左移 (<<)

18

<< 左移位

>> 右移位


4
啊,所以 operator<< 的使用已经被滥用于流实现中了。例如 std::cout << "Hello Mum" << std::endl。 - ScaryAardvark
5
@ScaryAardvark:这被称为过载。 - user195488
6
在语言学中,这被称为“杂交化”。 - dreamlax
3
@SigTerm等人:加号(+)可以对整数进行加法运算,也可以将字符串连接起来,这算是滥用吗?我认为如果以这种方式“重载”<<符号,并不会引起太多混淆或导致错误的代码……从这个角度来看,如果有什么影响的话,加号(+)可能更糟糕。 - Scott Stafford
3
@Scott Stafford: "concatenates strings",连接的结果包含原始字符串,它是它们的“和”,因此使用加号。逻辑清晰。 "I don't think << being" 我不同意,就这样。 操作符行为应该是一致的,即使使用iostream的“移位”运算符是标准的,也并不意味着它是好的。由于行为不同,应该为位移和iostreams采用不同的运算符。 - SigTerm
显示剩余11条评论

8
<< = Bitwise left shift
>> = Bitwise right shift


4
最初的名称是“左移”运算符(<<)和“右移”运算符(>>),但由于它们在流中的含义被扭曲为插入和提取,即使在位运算中,你也可以认为<< 在右侧“插入”位,而>> 则“提取”它们。因此,我几乎总是将它们称为“插入”和“提取”运算符。

1
<<是“左移”运算符。它将第一个操作数向左移动由第二个操作数指定的位数。

0
它们被称为『尖括号左』和『尖括号右』符号 :)

你有参考资料吗?还是我刚才没听出讽刺的意味? - Martin York
它们看起来像是 Guillemet 标记,但称之为这样会意味着每个 << 都需要一个闭合的 >>。我见过一些初学者注意到相似之处,并犯了直接使用 «» 字符的错误 :) - bta
需要关闭>>的好处很明显——我太聪明了!它们在Perl中也被使用:http://en.wikipedia.org/wiki/Guillemets - Robben_Ford_Fan_boy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接