Die STL ist ein kritischer Teil der C ++ - Welt. Die meisten Implementierungen stammen aus den anfänglichen Bemühungen von Stepanov und Musser.
Meine Frage ist angesichts der Kritikalität des Codes gegeben, und es ist eine der Hauptquellen für Menschen, Beispiele für gut geschriebenes C ++ sowohl für Ehrfurcht- als auch für Lernzwecke anzusehen: Warum sind die verschiedenen Implementierungen der STL so ekelhaft anzusehen - verschlungen und Im Allgemeinen gute Beispiele dafür, wie man C ++ - Code aus ästhetischer Sicht nicht schreibt.
Die folgenden Codebeispiele würden die Codeüberprüfung an den Orten, an denen ich gearbeitet habe, aus Gründen nicht bestehen, die von der Benennung der Variablen, dem Layout, den Makros und der Verwendung von Operatoren abweichen, die mehr als einen einfachen Blick erfordern, um herauszufinden, was tatsächlich geschieht.
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);
}
Bitte beachten Sie, dass ich die Benutzeroberfläche nicht kritisiere, da sie sehr gut gestaltet und anwendbar ist. Was mich beunruhigt, ist die Lesbarkeit der Implementierungsdetails.
Ähnliche Fragen wurden bereits gestellt:
Gibt es eine lesbare Implementierung der STL?
Warum ist die STL-Implementierung so unlesbar? Wie hätte C ++ hier verbessert werden können?
Hinweis: Der oben dargestellte Code stammt aus dem MSVC 2010-Algorithmus und den Warteschlangenheadern.