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迭代范围?
答案 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())
避免了另一个答案中提到的范围问题。