А почему может перестать им быть?)
А что изменилось с тех пор?
Стандарт стал чуть больше. Стало более модным использовать встроенные алгоритмы и прочие контейнеры. Сейчас наткнулся на кусочек кода вроде std::vector<int> dt = { 1, 2, 3, 4, 5, 6, 7, 8, 9}; std::ranges::shuffle(dt, std::mt19937(std::random_device()())); auto pos = std::ranges::find(dt.begin(), std::unreachable_sentinel, 7); std::ranges::copy(dt.begin(), ++pos, std::ostream_iterator<int>(std::cout, ",")); Подозреваю, что может быть ещё хуже (например, из очевидного, .begin() заменить на std::begin()).
Десятки отдельных using std::vector; using std::ranges::shuffle; using std::mt19937 для использования в одном-двух местах тоже не очень рационально.
не думаю что begin будет std:: итераторы лежат в неймспейсе класса
Тема дискуссионная и даже холиварная. В отдельных .cpp юзаем
А как это связано? std::begin зовёт cont.begin(), реализация my::begin() ни к чему
https://en.cppreference.com/w/cpp/iterator/begin От тех же людей, что используют std::sort (который, кстати, хорош) я слышал, что стоит использовать std::begin(cont) вместо cont.begin().
я вот как раз про это, но почему std::begin так и не понял
Согласен. А разве тут холивары запрещены?) Впрочем, тут единогласно решили, что using всего std - зло.
Не единогласно)) Нет чёрного и белого...
Надо использовать для своих кейсов. Когда вы не знаете, что вам придёт: контейнер или С-массив, — можно юзать. А в обычных кейсах не особо смысла. Это как вызывать функции со std::invoke.
Однако, пользы от ADL'я здесь не много (ведь в нем же смысл, да?). Впрочем, может сойти за UFCS для бедных)
Правильно тереть уже std::ranges::begin, наверное
Никто не запрещает так сделать в контексте алгоритма, в больших проектах неоднократно видел. Антипаттерн это для глобальных контекстов. Потому, что осложняет рефакторинг и например объединение в SCU.
Обсуждают сегодня