Jer*_*fin 60
根据C++的设计和演变 §8.3.1 :
Doug McIlroy通过类比UNIX shell中的I/O重定向运算符(>,>>,|等)提出了提供输出运算符而不是命名输出函数的想法.
[...]
几个运算符被考虑用于输入和输出操作:"赋值运算符是输入和输出的候选者,但它以错误的方式绑定.这
cout=a=b
将被解释为cout=(a=b)
,并且大多数人似乎更喜欢输入运算符与操作员<
和操作员>
都被尝试了,但是"小于"和"大于"的含义如此牢固地植入人们的脑海中,以至于新的I/O语句出于所有实际目的是不可读的(这似乎不是对于<<和>>的情况.除此之外,在大多数键盘上,'<'就在','之上,人们正在写这样的表达式:Run Code Online (Sandbox Code Playgroud)cout < x , y, z;
为此提供好的错误消息并不容易.
Abe*_*ker 17
也许是因为它看起来类似于Unix追加操作,因为你基本上是附加到输入/输出流?
例如
echo "foo" >> bar
sendmail -f test@domain.com << myemail.txt
(从Zac Howland窃取输入示例)
Umm*_*mma 11
来自"The C++ Programming language".Stroustrup(语言作者)的话:
将运算符重载为
<<
''put to''可以提供更好的表示法,并让程序员在单个语句中输出一系列对象.但为什么
<<
呢?不可能发明一个新的词法标记.赋值运算符是输入和输出的候选者,但大多数人似乎更喜欢使用不同的运算符进行输入和输出.而且,=以错误的方式绑定; 也就是说,cout = a = b表示cout =(a = b)而不是(cout = a)= b.我尝试了运营商<
和>
,但平均'小于""和""大于'是如此坚定地植入人们的思想,新的I/O声明是为不可读所有的实际目的.
因为他们或多或少有一个合理的优先权,看起来很好.在C++中,您无法创建新的运算符或更改其优先级或分组规则,您只能重载现有的运算符并更改它们实际执行的操作.
选择<<
并且>>
有一些不幸的副作用,因为它以某种方式推动输出将完成尊重订单的想法.虽然这对于实际输出来说是正确的,这要归功于一个巧妙的链接技巧,但是对于所涉及的计算来说却是错误的,这通常是令人惊讶的.
更具体的写作
std::cout << foo() << bar() << std::eol;
Run Code Online (Sandbox Code Playgroud)
并不意味着foo
之前会被召唤bar
.
所以你要记住,如果你认为cin
键盘和cout
显示器,你键入的内容会变成变量
cin>>var;
Run Code Online (Sandbox Code Playgroud)
或者变量的内容进入屏幕
cout<<var;
Run Code Online (Sandbox Code Playgroud)