【发布时间】:2010-07-04 19:42:44
【问题描述】:
查看 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 );
}
可以简化为
if( m_token != "{" )
return new InnerState( *(m_targets.push_back( unique_ptr<Target>(new Dough(m_token)) )), this );
如果我假设std::list::push_back 返回对添加元素的引用。代码有点重,但这主要是由于unique_ptr 的构造函数和取消引用它(两组括号)。也许为了清楚起见,没有任何指针的版本:
if( m_token != "{" )
{
m_targets.push_back( Dough(m_token) );
return new InnerState( m_targets.back(), this );
}
对比
if( m_token != "{" )
return new InnerState( m_targets.push_back( Dough(m_token) ), this );
【问题讨论】:
标签: c++ stl return-value containers