我正在测试C++PL书中的一段代码,并找到了下一段代码(我不想感觉自己在把它从这本书复制到我的IDE中,所以我至少更改了变量名):
istream& operator>> (istream& is, MyContact& mc)
{
char ch1, ch2;
string ContactName{""};
if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"')
{
while(is>>ch1 && ch1 != '"')
ContactName+=ch1;
if (is>>ch1 && ch1==',')
{
int ContactAge=0;
if (is>>ContactAge>>ch1 && ch1=='}')
{
mc={ContactName, ContactAge};
return is;
}
}
}
is.setstate(ios_base::failbit);
return is;
}根据此链接 istream::get“从流中提取单个字符”
根据此链接 istream::operator>>的说法,“从流中提取尽可能多的字符”
出于好奇,我替换了
if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"')使用
if (is.get(ch1) && is.get(ch2) && ch1=='{' && ch2=='"')而且起作用了。没有编译错误,而且程序显然做了它应该做的事情,现在我的问题是:
为什么在提取单个字符的上下文中使用运算符>> ,而 is.get() 将具有相同的功能?
发布于 2016-05-02 14:58:46
operator >>和get()的主要区别在于前者跳过了前导空格,而后者没有。
发布于 2016-05-02 15:11:56
您的变体“有效”,但对输入提出了更严格的要求。
原始代码将成功地读取{ "John Doe" , 29 },但如果使用get,也会读取空格,并失败。
https://stackoverflow.com/questions/36985418
复制相似问题