C ++ 11 / Auto给我一个bool?

时间:2016-04-14 10:36:35

标签: c++ c++11

ComboBox

嗨,我想应用自动变换介绍我的代码,但我卡住了。 如果我添加自动

TGuildMemberContainer::iterator it;
if ((it = m_member.find (p->dwPID)) == m_member.end())
{
    m_member.insert (std::make_pair (p->dwPID, TGuildMember (p->dwPID, p->bGrade, p->isGeneral, p->bJob, p->bLevel, p->dwOffer, p->szName)));
}
else
{
    TGuildMember& r_gm = it->second;
    r_gm.pid = p->dwPID;
    r_gm.grade = p->bGrade;
    r_gm.job = p->bJob;
    r_gm.offer_exp = p->dwOffer;
    r_gm.is_general = p->isGeneral;
}

自动分配if (auto it = m_member.find (p->dwPID) == m_member.end())

bool

这就是说Visual Studio intelisense。

我的问题,为什么自动为我分配一个bool而不是corect迭代范围?

2 个答案:

答案 0 :(得分:6)

因为编译器正在将其解析为:

    if (auto it = (m_member.find (p->dwPID) == m_member.end()))

这是一个布尔表达式。你不能把它写成:

    if ((auto it = m_member.find (p->dwPID)) == m_member.end())

因为不允许将变量声明放在括号内。

我发现if中的变量难以阅读。只需使用:

    const auto it = m_member.find(p->dwPID);
    if (it == m_member.end())
    ...

答案 1 :(得分:0)

在C ++ 17中,这可以作为

完成
if (auto it = m_member.find (p->dwPID); it == m_member.end())

避免了另一个答案中提到的范围问题。