通常你会发现这样的 STL 代码:
for (SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin(); Iter != m_SomeMemberContainerVar.end(); ++Iter)
{
}
但我们实际上有这样的建议:
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
如果您担心范围,请添加括号:
{
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
}
这应该可以提高速度和效率,尤其是在您对控制台进行编程时,因为在循环的每次迭代中都不会调用 .end() 函数。我只是认为性能改进是理所当然的,这听起来很合理,但我不知道有多少,这当然取决于容器的类型和实际使用的 STL 实现。但是在使用这种风格几个月后,我实际上比第一种更喜欢它。
原因是可读性:for 行整洁。在实际生产代码中使用限定符和成员变量,如果您使用第一个示例中的样式,很容易使行很长。这就是为什么我在这个例子中故意让它有一个水平滚动条,只是为了让你明白我在说什么。;)
另一方面,您突然将 Iter 变量引入 for 循环的外部范围。但是,至少在我工作的环境中,即使在第一个示例中,Iter 也可以在外部范围内访问。
你对此有什么看法?除了可能限制Iter的范围之外,第一种风格是否有任何专业人士?