在查看STL容器的成员函数时,我发现了一个奇怪的想法.为什么函数std::vector<T>::push_back(T)不具有(可选)返回值(迭代器或甚至对附加对象的引用)?我知道std::string函数insert和erase返回迭代器,但这是显而易见的原因.我认为它经常会保存经常跟随这些函数调用的第二行代码.
我敢肯定C++的设计师有很好的理由,请赐教:)
更新:我在这里包含一个真实的代码示例,它可以减少代码长度:
if( m_token != "{" )
{
m_targets.push_back( unique_ptr<Target>(new Dough(m_token)) );
return new InnerState( *(m_targets.back()), this );
}
Run Code Online (Sandbox Code Playgroud)
可以减少到
if( m_token != "{" )
return new InnerState( *(m_targets.push_back( unique_ptr<Target>(new Dough(m_token)) )), this );
Run Code Online (Sandbox Code Playgroud)
如果我假设std::list::push_back返回对添加元素的引用.代码有点重,但由于unique_ptr构造函数和解引用它,这主要是(两组括号).也许为了清晰起见没有任何指针的版本:
if( m_token != "{" )
{
m_targets.push_back( Dough(m_token) );
return new InnerState( m_targets.back(), this );
}
Run Code Online (Sandbox Code Playgroud)
与
if( m_token != "{" )
return new InnerState( m_targets.push_back( Dough(m_token) ), this );
Run Code Online (Sandbox Code Playgroud)