Я не понимаю, почему контейнеры STL в С++ 20 не имеют функции-члена .ssize()
, а вместо этого единственный способ получить размер со знаком (кроме очевидного приведения результата .size()
) — это бесплатная функция.
Я не могу придумать никакой «эргономической» причины, поскольку каждый контейнер STL (кромеforward_list
) содержит метод .size().
примечание: я не хочу вступать в священные войны по поводу функций-членов и свободных функций, но это действительно сбивает с толку, что есть функция-член с именем .size()
и что есть бесплатные функции size()
и ssize()
, но нет функции-члена с именем .ssize()
.
Почему контейнеры в C++20 не имеют функции-члена find()
? Вместо этого единственный способ найти значение — использовать std::find
!
@Barry, мы оба знаем, почему в некоторых контейнерах STL есть .find, а в некоторых нет.
@cigien tnx, исправлено, чтобы весь год был спорным :)
Лучше свести функции-члены к минимуму. (это в основном философия STL) std::ssize()
делает функцию-член ненужной. Есть шаг в C++11
, чтобы добавить бесплатные функции, чтобы сделать звонки участникам менее необходимыми.
не ответ, но вам нужна точка настройки, и вам не нужна вторая, чтобы привести результат к подписанному типу. Это не очень последовательно, но это не единственное место... По мнению Страуструпа, a.f() и f(a) в любом случае должны быть синтаксическим сахаром для одного и того же вызова функции...
Некоторая предыстория описана здесь P1227:
... во все контейнеры STL следует добавить функцию-член ssize(); это подразумевало расширение, что все контейнеры должны иметь функции-члены ssize (), и объем работы, который нужно сделать, сильно сопротивлялся некоторым присутствующим.
В 2018 году в Сан-Диего функции-члены ssize() не имели такого консенсуса, как предложение без них, и были удалены.
хорошо, что вы не скопировали эту часть, люди бы подумали, что вы троллите ;): Я полагаю, что возражение против «P1089+P1227» заключалось в том, что в P1227 был пункт о том, что функция-член ssize() должна быть добавлена ко всем STL контейнеры; это подразумевало расширение, что все контейнеры должны иметь функции-члены ssize(), и объем работы, который необходимо выполнить, сильно сопротивлялся некоторым присутствующим.
Я думаю, вы имели в виду «святые войны», но ваша опечатка как раз подходит к курортному сезону :)