Комментарии 9
Хорошая статья, но если бы я не заглянул в общий поток, то пропустил бы её. Поставьте пожалуйста тег С++.
хорошо, что еще есть статьи, не переведенные бомжами и не написанные бредосетью
Нужно подчеркнуть, что std::span не владеет данными, а лишь предоставляет «вид» на них, что делает его безопасным и эффективным инструментом.
Безопасным невладеющий контейнер может быть лишь в определённых условиях. Передавать им данные в функцию - прекрасно, а в свободном виде использовать с осторожностью, следить чтобы его время жизни не превышало время жизни исходного массива.
Например вот так не надо делать:
std::span<int> foobar(int i, int j, int k)
{
std::vector<int> a{i, j, k};
return std::span(a);
}
А во второй части примера создали span на основе вектора и дальше, увеличивая вектор, получили автоматически проход по всему вектору, а не только по той части, которая была на момент создания.
Не увидел там никакого спана, там на печать отдается вектор в обоих случаях.
Статья сгенерена LLM?
Эммм, ну там как бы implicit конструктор std::span вызывается при вызове print_array (обратите внимание на сигнатуру функции). Вы не видите, а он есть))
Хотя конечно, стоило написать, что std::spand неявно может конструироватся от std::vector
Так там два разных спана, не понимаю, о каком автоматическом проходе по увеличенному вектору вы говорите. Что должен иллюстрировать этот пример?
каждый второй недовольный нынче обзывает все нейросетью с порога к месту и без места
Когда работаешь со старым легаси кодом, который написан в стиле Си с классами, либо когда пишешь обёртки над сишными библиотеками - чувствуется, что std::span
может хорошо пригодиться.
Как правильно готовить std::span