C++ C++;11/自动为我分配一个布尔?
嗨,我想在我的代码中应用自动转换介绍,但我被卡住了。 如果我加上自动C++ C++;11/自动为我分配一个布尔?,c++,c++11,C++,C++11,嗨,我想在我的代码中应用自动转换介绍,但我被卡住了。 如果我加上自动 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,
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;
}
自动分配一个bool
if (auto it = m_member.find (p->dwPID) == m_member.end())
这就是VisualStudioIntelissense
我的问题是,为什么自动为我分配布尔值而不是corect迭代范围?因为编译器正在将其解析为:
if ( bool it = m_member.find (p->dwPID) == m_member.end())
这是一个布尔表达式。你不能把它写成:
if (auto it = (m_member.find (p->dwPID) == m_member.end()))
因为这样把变量声明放在括号内是不允许的
我发现在if
中创建变量很难理解。只需使用:
if ((auto it = m_member.find (p->dwPID)) == m_member.end())
因为编译器正在将其解析为:
if ( bool it = m_member.find (p->dwPID) == m_member.end())
这是一个布尔表达式。你不能把它写成:
if (auto it = (m_member.find (p->dwPID) == m_member.end()))
因为这样把变量声明放在括号内是不允许的
我发现在if
中创建变量很难理解。只需使用:
if ((auto it = m_member.find (p->dwPID)) == m_member.end())
在C++17中,这可以按如下方式完成
const auto it = m_member.find(p->dwPID);
if (it == m_member.end())
...
这避免了另一个答案中提到的范围问题。在C++17中,这可以按如下方式完成
const auto it = m_member.find(p->dwPID);
if (it == m_member.end())
...
这就避免了另一个答案中提到的范围问题。这里,用这些:
()
;-)它不能按照你看起来想要的方式来做,因为它是一个复杂的过程。您必须在条件之外声明变量(使用auto
)它不能按照你看起来想要的方式来做,因为它是一个复杂的过程。您必须在条件之外声明变量(使用auto
)。在您的示例中,在您的范围内有一个悬挂的迭代器it
。在我看来,在这个例子中,仅仅为了强制作用域而使用多余的括号{}是一件混乱的事情。我更希望看到对条件声明的支持得到扩展…足够公平。我尽量减小封闭范围的大小,这样就不会有太大的问题。只有当变量的析构函数很重要(比如锁守卫)时,我才会支持{}。我发现很难阅读,因为我不喜欢将非bool变量强制转换为bool。我倾向于选择if(ptr!=nullptr)
而不是if(ptr)
。你们为什么总是使用const?我的意思是,我应该使用const intro evry auto transform吗?我总是使用const(除非我不能),因为它使我更容易对程序进行推理,也使编译器更容易对其进行推理(编译器对程序的推理越多,它就越能优化)。作为旁白,我喜欢在条件逻辑中定义变量,因为它强制作用域。在您的示例中,在您的范围内有一个悬挂的迭代器it
。在我看来,在这个例子中,仅仅为了强制作用域而使用多余的括号{}是一件混乱的事情。我更希望看到对条件声明的支持得到扩展…足够公平。我尽量减小封闭范围的大小,这样就不会有太大的问题。只有当变量的析构函数很重要(比如锁守卫)时,我才会支持{}。我发现很难阅读,因为我不喜欢将非bool变量强制转换为bool。我倾向于选择if(ptr!=nullptr)
而不是if(ptr)
。你们为什么总是使用const?我的意思是,我应该使用const intro evry auto transform吗?我总是使用const(除非我不能),因为它使我更容易对程序进行推理,也使编译器更容易对其进行推理(编译器对程序的推理越多,它的优化效果越好)。