LINUX.ORG.RU
ФорумTalks

Небольшой обзор С++ 20/23 на примере Visual C++

 ,


1

2

Обзор Stephan T. Lavavej: https://youtu.be/DAl37n2XOwk

Если нет получаса для просмотра видео, то вот примеры части новых возможностей С++ которые рассмотрены в видео:

C++20 P0734R0 requires Expressions https://godbolt.org/z/jY1bETG7E

C++23 P0847R7 Deducing this https://godbolt.org/z/Tx8j4eeEr

C++23 P1679R3 contains() For string[_view] https://godbolt.org/z/eGKf6ns5r

C++23 P2166R1 Prohibiting string[_view] Construction From nullptr https://godbolt.org/z/KvocPWf33

C++23 P1072R10 basic_string::resize_and_overwrite https://godbolt.org/z/eWs57W36E

C++23 P0288R9 move_only_function https://godbolt.org/z/qorYY9va9

C++23 P0798R8 Monadic Operations For optional https://godbolt.org/z/dsnzxro9a

Мне больше всего понравились новая возможность C++23 P0847R7 Deducing this :

struct Cat {
    string m_name;
template <typename Self>
    decltype(auto) name(this Self&& self) {
        return forward<Self>(self).m_name;
    }
};

😺

Также 26 апреля 2022 с 18:00 до 21:00 по Москве пройдёт бесплатная однодневная виртуальная конференция для сообщества C++: https://aka.ms/pure-virtual-cpp

★★★★★

Последнее исправление: xaizek (всего исправлений: 5)

C++23 P2166R1 Prohibiting string[_view] Construction From nullptr

Неужели они это сделали? string(false) наконец-то выдает ошибку при компиляции. Я джвадцать лет ждал…

rupert ★★★★★
()
struct Cat {
    string m_name;
template <typename Self>
    decltype(auto) name(this Self&& self) {
        return forward<Self>(self).m_name;
    }
};

Какая аццкая жесть. Блин, надо засесть за C++20…

intelfx ★★★★★
()

У авторов С++ (комитета, лол) закончились идеи, началась откровенная имитация бурной деятельности.

Монадические операции — просто ахтунг. Даже джаваскриптеры перестали пользоваться этой ублюдочной нотацией, но нет, в плюсах это новая фича.

filosofia
()
struct Cat {
    string m_name;
template <typename Self>
    decltype(auto) name(this Self&& self) {
        return forward<Self>(self).m_name;
    }
};

Скажите в какой момент С++ из приятного милого и удобного инструмента с неплохими инструментами для OOP превратился в ето ублюдочное чудовище? Да даже хаскел более читабелен… Простая статистика: 8 ключевых слов, 3 слова переменные, 1 титульное слово…

Jetty ★★★★★
()
Последнее исправление: Jetty (всего исправлений: 3)
Ответ на: комментарий от Jetty

У плюсов есть всё же хорошее оправдание: этой жестью совсем необязательно пользоваться. И большинство людей это всё игнорирует. Статьи-то эти пишут единицы, которые прямо или косвенно связаны с новыми стандартами. Остальные просто пишут код, который можно будет прочитать.

Но иногда эти заклинания позволяют написать необычную вещь, реально упрощающую жизнь.

Usruser
()
Ответ на: комментарий от Jetty

Скажите в какой момент С++ из приятного милого и удобного инструмента с неплохими инструментами для OOP превратился в ето ублюдочное чудовище?

По поводу использования Deducing this

This makes MSVC the first compiler to support recursive lambda's and by-value member functions.

https://godbolt.org/z/EevMPo53x

https://godbolt.org/z/az54s178G

Ну и как пример из поста, что это сокращает реализацию перегрузок для методов для всех типов ссылок:

https://godbolt.org/z/Tx8j4eeEr

fsb4000 ★★★★★
() автор топика
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от Usruser

Это не оправдание. В любом языке можно найти уютное подмножество.

Все меняется, когда к тебе в команду приходят пионеры, обмазанные всякой жестью. Или ты приходишь в такую команду. Или читаешь опенсорсные ребусы.

filosofia
()
Ответ на: комментарий от Jetty

Вот чтобы в такие шарады не лезть, я пользуюсь простым правилом: если уж сильно нужна производительность --- изволь хавать C, если нужно ООП++ --- бери Java/C#/Kotlin (Native) etc и не выделывайся.

DarkAmateur ★★★★
()

Шел self по self, видит self на self… Кто это придумал - чужие для хищников?

Turbid ★★★★★
()
Ответ на: комментарий от fsb4000

by-value member functions
https://godbolt.org/z/az54s178G

    constexpr bool operator()(this less_than, T const& lhs, U const& rhs) noexcept(noexcept(lhs < rhs)) {
        return lhs < rhs;
    }

less_than в этом примере нигде не используется. Непонятно, в чём здесь приемущество по сравнению с простым:

    constexpr bool operator()(T const& lhs, U const& rhs) noexcept(noexcept(lhs < rhs)) {
        return lhs < rhs;
    }
rupert ★★★★★
()
Ответ на: комментарий от DarkAmateur

изволь хавать C

С примитивной стандартной библиотекой, отсутствием value semantics, ручным управлением памятью и другими прелестями? Нет уж, увольте. Почему все думают, что если C++, то значит обязательно погрязать в вырвиглазных шаблонах?

rupert ★★★★★
()
Ответ на: комментарий от rupert

С примитивной стандартной библиотекой, отсутствием value semantics, ручным управлением памятью и другими прелестями?

Если для Вас это проблема, то ...

бери Java/C#/Kotlin (Native) etc

DarkAmateur ★★★★
()
Ответ на: комментарий от Jetty

Какая аццкая жесть.

даже хаскел более читабелен

просто ахтунг.

@Jetty @Turbid @intelfx

решил поделиться, так как вижу что вы ценители :)

template <size_t... _Ix, class _Cv_FD, class _Cv_tuple_TiD, class... _Unbound>
constexpr auto _Call_back_binder(index_sequence<_Ix...>, _Cv_FD&& _Obj, _Cv_tuple_TiD&& _Tpl,
    _Unbound&&... _Unbargs) noexcept(noexcept(_STD invoke(_STD forward<_Cv_FD>(_Obj),
    _STD forward<_Unbound>(_Unbargs)..., _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...)))
    -> decltype(_STD invoke(_STD forward<_Cv_FD>(_Obj), _STD forward<_Unbound>(_Unbargs)...,
        _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...)) {
    return _STD invoke(_STD forward<_Cv_FD>(_Obj), _STD forward<_Unbound>(_Unbargs)...,
        _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...);
}

Отсюда: https://github.com/microsoft/STL/pull/2661/files#diff-178b25b5f353096edfae29c1884d78603f28f9aa5822b81590cb6bc0afe0f770R2121-R2129

fsb4000 ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

Хакерам удалось украсть последние 50 МБ исходного кода программы на Lisp C++, которая управляет запуском баллистических ракет США.

К счастью, там было только:

...>, _Cv_FD&& _Obj, _Cv_tuple_TiD&& _Tpl,
    _Unbound&&... _Unbargs) noexcept(noexcept(_STD invoke(_STD forward<_Cv_FD>(_Obj),
    _STD forward<_Unbound>(_Unbargs)..., _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...)))
    -> decltype(_STD invoke(_STD forward<_Cv_FD>(_Obj), _STD forward<_Unbound>(_Unbargs)...,
        _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...)) {
    return _STD invoke(_STD forward<_Cv_FD>(_Obj), _STD forward<_Unbound>(_Unbargs)...,
        _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...
MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)

А опубликуешь список интересных ресурсов по С++? Или может где то уже его писал?

MOPKOBKA ★★★★★
()
Ответ на: комментарий от DarkAmateur

Это можно уже давно :) Выделяешь сразу всю нужную память и не удаляешь ничего и никогда :)

slackwarrior ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Смешно 🤣

А опубликуешь список интересных ресурсов по С++? Или может где то уже его писал?

Не, нигде не писал. Но я и не знаю никаких интересных ресурсов :(

cpp weekly: https://www.youtube.com/c/lefticus1/videos стараюсь смотреть

cppcon https://www.youtube.com/user/CppCon/videos , тут только если понравилась тема или кто-то порекомендовал какое-то конкретное видео.

reddit: https://www.reddit.com/r/cpp/ тут тоже можно просто темы смотреть и если что-то заинтересовало, то почитать.

fsb4000 ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

Да ну. Если убрать дебильный stdlib-ный стиль именования и по-человечески отформатировать, то получится вполне себе обычный рутинный код на вариадиках. А в шапке какая-то аццкая жесть, в которой на три идентификатора двадцать ключевых слов :)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от Jetty

Скажите в какой момент С++ […] превратился в ето ублюдочное чудовище?

Воистину.

pr849
()
Ответ на: комментарий от DarkAmateur

если уж сильно нужна производительность — изволь хавать C

А чо не фортран? Архитектур больше, производительность не меньше.

hateyoufeel ★★★★★
()
Ответ на: комментарий от Jetty

Он всегда таким был, не? НУЖНО БОЛЬШЕ СИНТАКСИСА!!!!11

hateyoufeel ★★★★★
()
Ответ на: комментарий от Jetty

Скажите в какой момент С++ […] превратился в ето ублюдочное чудовище?

Я понял: не позднее чем когда ключевые слова final override добавили в конец сигнатур, а не в начало рядом с virtual.

pr849
()

C++23 P2166R1 Prohibiting string[_view] Construction From nullptr

Джва года ждал.

Meyer ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.