Стандарт может ввести требование поддерживать __attribute__
Нет, не может. Они хотели, но у них не получилось. Слишком много кто в лес, кто по дрова.
и смысла в этом будет больше, чем от [[такого]] синтаксиса атрибутов
Нет, не будет, потому что [[такой синтаксис]] - это новый синтаксис с семантикой, описанной в стандарте, который можно если не реализовать, то хотя бы безопасно проигнорить. А с __attribute__ легко нарваться на идентичное написание, но разное поведение в ньюансах.
Да хера-с-два. У интела компилятор не ради компилятора, а компилятор ради библиотек, которые идут с компилятором. И там никто никого не обогнал даже близко.
Ещё у амуды свой форк силанга, но я не знаю, чё с ним.
Cray C/C++ (CC)
Тоже какой-то мутный компилятор.
Какой-то мутный - это ты. А Cray - это Cray. Крэя знать надо.
Есть ли какие-то объективные причины использовать смарт-поинтеры, если new вызывается в конструкторе, а delete в деструкторе? Ну, кроме того, что меньше строчек.
Есть - автоматизация. Вручную, нет гарантий вообще. Со смартпоинтером, нет проблемы «забыли вызвать» или «вызвали дважды». А ситуации когда забыли - сплошь и рядом.
Начни с C++98. Когда почувствуешь, что чего-то не хватает поищи в C++ > 98. А лет через 15, когда окончательно устанешь, переходи отдыхать на Haskell/OCaml/F#.
std::vector<A> vec;
auto find_view = vec | std::views::filter( std::bind_front( std::ranges::equal_to(), value ) )
| std::views::take(1);
if ( not find_view.empty() ) {
//do some with find_view.front()
}
Как это читать? Ну если filter еще более-менее понятно, то что такое bind_front? Как можно понять, не залезая в документацию? Что-то связывается с чем-то спереди? std::bind1st переизобрели или что? Абсолютно дебильное название, которое не говорит о смысле функции.
И это все еще ужасно в сравнении с приведенным мной примером. Я напомню: мы линейный поиск делаем, а тут буковок прям выше крыши. Функцией линейного поиска будут пользоваться, если она короче написания for. Если for написать короче, то пользоваться этой функцией нет смысла. Печатать больше, кода больше, следовательно, багов больше, ясности меньше.
так а если будет нужно чото сделать с передачей самого инвокабл объекта? в твоём случае будет неуниверсально — а так будет все универсально — но ты как я понял явный неприветственник для разных стилей программирования (функционального в частности)
Конкретно find в 99% случаев нужен по всему контейнеру, а не по подмножеству. И ситуация настолько плоха, что единственное существующее стандартное решение - std::ranges::search.
ну ты же и сделаешь свой смарт-поинтер по сути тогда — зачем кодировать что уже накодировано? ну и в `std::` обычно все самое лучшим образом заоптимизированное — вдобавок еще и компилятор-определённым способом
ну и в std:: обычно все самое лучшим образом заоптимизированное
STD - это не про оптимизацию, а про максимально правильную реализацию чего-то стандартного. Оптимизировать там обычно нечего. Что там в std::vector оптимизировать, оно тупое как полено внутри. А вот написать std::vector чтобы идеоматически всему что надо соответствовало со всеми там итераторами - вот где в дурку уедешь. Если бы STD был прям офигеть как «оптимизирован», не появлялось бы всяких альтернативных библиотек с контейнерами. Ну, да, альтернативные появляются не потому, что STD не оптимизировано, а скорее потому, что в STD не всё есть, но иногда и по первой причине, например люди хотят какой-то особый свой vector с какими-то приколами, которые в их мире считаются «оптимизировано».
Это не важно. Важно то, что это тащит в зависимости программы сложнющий и недетерменированный malloc. А также вызывает утечки памяти, если забыть освободить выделенную память. Лучше с этим вообще не связываться по-возможности.
а никто не говорит, что нужно при каждом чихе выделять в динамическом сторадже — но для того, что бы не забыть есть как раз уже сделанное — смарт-поинтеры, контейнеры, алгоритмы... не использовать динамическую память это плохой совет, поскольку тогда пришлось бы «ванговать» что бы выделить в автоматическом или ином нединамическом варианте стораджа (в обыденности называют «на стеке»)...