Имена переменных по той причине, что это стандартный код библиотеки, и он должен использовать зарезервированные имена для деталей реализации в заголовках. Следующее должно не сломать стандартные библиотеки:
#define mid
#include <algorithm>
Таким образом, заголовки стандартной библиотеки не могут использовать mid
в качестве имени переменной, следовательно, _Mid
. STL был другим - он не был частью спецификации языка, он был определен как «вот некоторые заголовки, используйте их как хотите»
Ваш код или мой, с другой стороны, был бы недействительным, если бы он использовал _Mid
в качестве имени переменной, поскольку это зарезервированное имя - реализация может делать:
#define _Mid
если хочется.
Макет - мех. У них, вероятно, есть руководство по стилю, они, вероятно, следуют ему, более или менее. Тот факт, что он не соответствует моему руководству по стилю (и, следовательно, может провалиться при проверке кода), для них ничего не значит.
Операторы, с которыми сложно работать - кому сложно? Код должен быть написан для людей, которые его поддерживают, и для GNU / Dinkumware / тех, кто, вероятно, не хочет выпускать людей из стандартных библиотек, которые не могут сразу разгадать *--_Next
. Если вы используете такое выражение, вы привыкнете к нему, а если не будете, то продолжите находить его сложным.
Я дам вам, однако, что перегрузка operator()
- это бред. [Править: Я понял, это линейный конгруэнтный генератор, выполненный очень обобщенно, и если модуль равен «0», это означает, что нужно просто использовать естественный перенос арифметического типа.]