STL 是 C + + 世界中的一个关键部分,大多数实现都源于 Stepanov 和 Musser 最初的努力。
我的问题是代码的关键性,它是人们为了敬畏和学习的目的而查看编写良好的 C + + 的例子的主要来源之一: 为什么 STL 的各种实现看起来如此令人厌恶——从美学的角度来看,这些例子是如何不编写 C + + 代码的。
下面的代码示例无法通过我工作过的地方的代码审查,原因各不相同,从变量命名、布局、宏和运算符的使用,这些都需要不仅仅是简单的一瞥来弄清楚实际发生了什么。
template<class _BidIt> inline
bool _Next_permutation(_BidIt _First, _BidIt _Last)
{ // permute and test for pure ascending, using operator<
_BidIt _Next = _Last;
if (_First == _Last || _First == --_Next)
return (false);
for (; ; )
{ // find rightmost element smaller than successor
_BidIt _Next1 = _Next;
if (_DEBUG_LT(*--_Next, *_Next1))
{ // swap with rightmost element that's smaller, flip suffix
_BidIt _Mid = _Last;
for (; !_DEBUG_LT(*_Next, *--_Mid); )
;
_STD iter_swap(_Next, _Mid);
_STD reverse(_Next1, _Last);
return (true);
}
if (_Next == _First)
{ // pure descending, flip all
_STD reverse(_First, _Last);
return (false);
}
}
}
_Ty operator()()
{ // return next value
static _Ty _Zero = 0; // to quiet diagnostics
_Ty _Divisor = (_Ty)_Mx;
_Prev = _Mx ? ((_Ity)_Ax * _Prev + (_Ty)_Cx) % _Divisor
: ((_Ity)_Ax * _Prev + (_Ty)_Cx);
if (_Prev < _Zero)
_Prev += (_Ty)_Mx;
return (_Prev);
}
请注意,我不是批评界面,因为它是非常好的设计和适用性。我所关心的是实现细节的可读性。
以前也提出过类似的问题:
为什么 STL 的实现如此不可读? C + + 是如何在这里得到改进的?
注意: 以上代码取自 MSVC 2010算法和队列头。