C++ istream::operator>&燃气轮机;或者istream::get

C++ istream::operator>&燃气轮机;或者istream::get,c++,c++11,C++,C++11,我测试了C++PL手册中的一段代码,找到了下一段代码(我不想觉得我是在将它从书中复制粘贴到IDE,所以我至少更改了变量名): 根据istream::get“从流中提取单个字符” 根据istream::operator>>“从流中提取尽可能多的字符” 出于好奇,我换了 if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"') 与 它成功了。没有编译错误,程序显然做了它应该做的,现在我的问

我测试了C++PL手册中的一段代码,找到了下一段代码(我不想觉得我是在将它从书中复制粘贴到IDE,所以我至少更改了变量名):

根据istream::get“从流中提取单个字符”

根据istream::operator>>“从流中提取尽可能多的字符”

出于好奇,我换了

if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"')

它成功了。没有编译错误,程序显然做了它应该做的,现在我的问题是:


为什么在我们提取单个字符的上下文中使用操作符
,而
是.get()
将具有相同的功能?

操作符>和
get()
之间的主要区别在于前者跳过了前导空格,后者没有。

运算符>和
get()
之间的主要区别在于前者跳过前导空格,而后者则没有。

您的变体“起作用”,但对输入提出了更严格的要求

原始代码将成功地读取
{“John Doe”,29}
,但如果使用
get
,您也将读取空白,并失败。

您的变体“工作”,但对输入提出了更严格的要求


原始代码将成功地读取
{“John Doe”,29}
,但是如果使用
get
,您也将读取空白,并且失败。

那么键入的字符数将减少3个。如果(is>>ch1>>ch2&&ch1='{'&&ch2='',,那么这将减少一次测试
@LokiAstari你是对的。我会检查这本书,可能作者是这样使用它的,我没有注意到。(毕竟,它在if(is>>ContactAge>>ch1&&ch1=='})行中)好了,键入的字符少了3个。如果(is>>ch1>>ch2&&ch1='}),这将是一个测试
少了一个
@LokiAstari你是对的。我会检查这本书,可能是作者那样使用的,我没有注意到。(毕竟,它在if(is>>ContactAge>>ch1&&ch1='})行中)我注意到我有if(is>>ch1&&ch1='','),当我尝试“Hector Corea”时,它被转换成了“Hector Corea”。在我把它改成is.get(ch1)后,它就像一个符咒。我注意到我有if(is>>ch1&&ch1==','),当我尝试“Hector Corea”时,它被转换成了“Hector Corea”。在我把它改成is.get(ch1)后,它就像一个符咒。
if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"')
if (is.get(ch1) && is.get(ch2) && ch1=='{' && ch2=='"')