C++11/ 自动给我分配一个布尔值

C++11/ Auto assign me a bool?

本文关键字:一个 布尔值 分配 C++11      更新时间:2023-10-16
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

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

这说Visual Studio intelisense。

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

因为编译器将其解析为:

    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())
    ...

在 C++17 中,这可以完成为

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

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