首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >istream::operator>>或istream::get

istream::operator>>或istream::get
EN

Stack Overflow用户
提问于 2016-05-02 14:53:05
回答 2查看 116关注 0票数 0

我正在测试C++PL书中的一段代码,并找到了下一段代码(我不想感觉自己在把它从这本书复制到我的IDE中,所以我至少更改了变量名):

代码语言:javascript
复制
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>>的说法,“从流中提取尽可能多的字符”

出于好奇,我替换了

代码语言:javascript
复制
if (is>>ch1 && is>>ch2 && ch1=='{' && ch2=='"')

使用

代码语言:javascript
复制
if (is.get(ch1) && is.get(ch2) && ch1=='{' && ch2=='"')

而且起作用了。没有编译错误,而且程序显然做了它应该做的事情,现在我的问题是:

为什么在提取单个字符的上下文中使用运算符>> ,而 is.get() 将具有相同的功能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-02 14:58:46

operator >>get()的主要区别在于前者跳过了前导空格,而后者没有。

票数 4
EN

Stack Overflow用户

发布于 2016-05-02 15:11:56

您的变体“有效”,但对输入提出了更严格的要求。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36985418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档