通常你会发现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行非常整洁。在真正的生产代码中使用限定符和成员变量时,如果使用第一个示例中的风格,很容易出现非常长的for行。这就是为什么我故意让本示例具有水平滚动条,只是为了让你看到我在说什么。 ;)
另一方面,你突然将Iter变量引入到for循环的外部作用域。但是,在我工作的环境中,即使在第一个示例中,Iter也将在外部作用域中可访问。
你对此有何看法?除了可能限制Iter的范围外,第一个风格还有哪些优点吗?