не понимаю c++latest
От: wl. Россия  
Дата: 23.06.25 17:44
Оценка:
пытаюсь вникнуть в суть нововведений, и почему-то ничего не могу понять, какая-то абстракция, наподобие высшей математики на первом курсе.
Не понимаю, как всё это использовать, например:

Концепт SemiRegular
Тип X является semiregular, если он поддерживает большую шестерку функций
(Big Six) и операцию swap. Большая шестерка состоит из следующих функций:
 конструктор по умолчанию X();
 конструктор копирования X ( const X& );
 оператор присваивания X& operator ( const X& );
 конструктор перемещения X ( X&& );
 оператор перемещения X& operator = ( X&& );
 деструктор ~X().
Дополнительно к этому должна быть определена операция swap(X&, X&).
Благодаря библиотеке свойств типов1
определить соответствующий концепт легко. Для начала я определю свойство типа isSemiRegular и затем использую его для определения концепта SemiRegular.
1 template<typename T>
2 struct isSemiRegular: std::integral_constant<bool,
3 std::is_default_constructible<T>::value &&
4 std::is_copy_constructible<T>::value &&
5 std::is_copy_assignable<T>::value &&
6 std::is_move_constructible<T>::value &&
7 std::is_move_assignable<T>::value &&
8 std::is_destructible<T>::value &&
9 std::is_swappable<T>::value >{};
10
11
12 template<typename T>
13 concept SemiRegular = isSemiRegular<T>::value;


Что это такое? где это применяется? и так повсюду
Re: не понимаю c++latest
От: m2user  
Дата: 23.06.25 18:39
Оценка:
wl.>Что это такое? где это применяется? и так повсюду

Концепты? Для шаблонов, чтобы ошибки в при компиляции были более понятные.
(cвойства типов — это type traits, как я понимаю?).

Я бы посоветовал книжку по относительно свежим стандартам: например
978-1-4842-9342-3

Про концепты там глава на 20 страниц. С пояснениями, зачем это нужно.
Re[2]: не понимаю c++latest
От: wl. Россия  
Дата: 23.06.25 18:55
Оценка: -1
Здравствуйте, m2user, Вы писали:

M>Я бы посоветовал книжку по относительно свежим стандартам: например

M>
M>978-1-4842-9342-3
M>


а на русский эту книгу переводили? боюсь еще больше запутаться при чтении оригинала
Re: не понимаю c++latest
От: xma  
Дата: 23.06.25 20:14
Оценка:
Здравствуйте, wl., Вы писали:

wl.>пытаюсь вникнуть в суть нововведений, и почему-то ничего не могу понять, какая-то абстракция, наподобие высшей математики на первом курсе.

wl.>Не понимаю, как всё это использовать
wl.>Что это такое? где это применяется? и так повсюду

попробуй ChatGPT поспрашивать, он хоть иногда и по всякому магазинному хламу галлюцинирует (по реальным и эксплуатационным характеристикам, вплоть до прямо противоположного) — но с кодом часто неплохо шарит (в т.ч. и если свои куски кода ему показывать и задавать вопросы), может даже и небольшие аппликухи почти безошибочно писать
Re[3]: не понимаю c++latest
От: m2user  
Дата: 23.06.25 20:15
Оценка:
wl.>а на русский эту книгу переводили? боюсь еще больше запутаться при чтении оригинала

скорее всего нет, книга 2023 года издания.
(сейчас вообще что-то официально переводят на русский?).
А концепты, если я не ошибаюсь, в C++20 окончательно вошли.

Но там изложение несложным языком с примерами.
Для сравнения у Страуструпа в "Programming Principles and Practice Using C++ (2024, Addison-Wesley Professional)" про концепты всего 2 страницы.
(хотя может оно так и нужно, учитывая тот факт, что концепты нужны только тем, кто активно пишет свои шаблоны)
Re: не понимаю c++latest
От: Doom100500 Израиль  
Дата: 24.06.25 05:56
Оценка: 3 (2) +1
Здравствуйте, wl., Вы писали:

wl.>пытаюсь вникнуть в суть нововведений, и почему-то ничего не могу понять, какая-то абстракция, наподобие высшей математики на первом курсе.


Просто и по-русски.

Концепты — это ограничения на C++ шаблоны. Раньше шаблоны были без ограничений, но при помощи техники SFINAE можно было проверить тип на присутствие определённых свойств.
Концептами можно декларативно описать ограничения типа (можно вызвать метод / копируемых / число / строка, и т.д);

Штука очень полезная, если пишешь библиотечный или утилитарный код. Стоит изучить.

Ну а поскольку в плюсах всё простое быстро становится сложным, то концептами можно описать любые фантазии, и сами концепты превратились в ещё один над-язык, но, тем не менее, простые ограничения писать удобно.

ПС.
Поиск c++ concepts по-началу приводил к филосовским статьям .
Спасибо за внимание
Re: не понимаю c++latest
От: so5team https://stiffstream.com
Дата: 24.06.25 07:33
Оценка: 9 (5)
Здравствуйте, wl., Вы писали:

wl.>Что это такое? где это применяется? и так повсюду


"Что это" в вашем вопросе относится к чему? К концептам самим по себе или же конкретно к концепту SemiRegular?

Если к концептам, то концепты предназначены для описания ограничений параметров шаблонов в C++.
Можно сказать, что концепты добавляют в C++ то, что в C# или в Rust-е реализуется посредством where.
Типа если в C# написано:
public T AddEC<T>() where T : EntityComponent, ... {...}

то в C++ может быть написано как:
template<typename T>
requires EntityComponet<T>
T AddEC() {...}


Основных применений у C++ных концептов сейчас два (может более опытные в современном C++ добавят еще сценариев):

1. Описание ограничений, которым должен соответствовать параметр шаблона. Например, у нас может быть концепт Addable, который накладывает требование наличия операции сложения для типа T. И мы можем написать функцию add требуя, чтобы ее параметры удовлетворяли концепту Addable:
template<typename T>
concept Addable = ...;

template<typename T>
requires Addable<T>
auto add(const T & a, const T & b) {...};

И когда мы в add подсунем аргументы, которые не поддерживают сложения, то вместо простыни ошибок о том, что компилятор не может применить operator+ к чему-то внутри add, мы получим ошибку о том, что функция add не может быть применена, т.к. ее параметры не удовлетворяют концепту.
Попробуйте вот такой пример: https://godbolt.org/z/f77Wr177M
С закомментированной и раскомментированной строчкой requires в определении add.

2. Выбор перегрузки на основании концептов. Т.е. прямая замена техники SFINAE.
Например, вы можете определить функции:
template<typename T>
requires std::signed_integral<T>
std::string to_string(T v) {...}

template<typename T>
requires std::unsigned_integral<T>
std::string to_string(T v) {...}

template<typename T>
requires std::floating_point<T>
std::string to_string(T v) {...}

И сам компилятор будет выбирать подходящую реализацию в зависимости от того, какой аргумент вы подсовываете. Например, https://godbolt.org/z/6r8Y8dMTn
Re: не понимаю c++latest
От: jamesq Россия  
Дата: 24.06.25 13:34
Оценка:
Здравствуйте, wl., Вы писали:

wl.>пытаюсь вникнуть в суть нововведений, и почему-то ничего не могу понять, какая-то абстракция, наподобие высшей математики на первом курсе.


И насколько сильно все эти навороты с концептами и прочими новшествами последних стандартов используются в современных конторах? Насколько надо всё это изучать?
По-моему сейчас больше чем C++17 ничего не требуется нигде.

Знаете, у меня складывается мнение, что вместо изучения последних фич C++, лучше заняться изучением чего-то иного. Например, предметной области. Пользы будет больше.
Re: не понимаю c++latest
От: andyp  
Дата: 24.06.25 14:11
Оценка:
Здравствуйте, wl., Вы писали:

wl.>пытаюсь вникнуть в суть нововведений, и почему-то ничего не могу понять, какая-то абстракция, наподобие высшей математики на первом курсе.


SeomiRegular-Regular — это наоборот очень старое. Почитай например Alexander Stepanov and Paul McJones: Elements of Programming, ну или любую лекцию из старых заметок Степанова по алгоритмам.
Re[2]: не понимаю c++latest
От: wl. Россия  
Дата: 24.06.25 15:46
Оценка:
Здравствуйте, andyp, Вы писали:

wl.>>пытаюсь вникнуть в суть нововведений, и почему-то ничего не могу понять, какая-то абстракция, наподобие высшей математики на первом курсе.

A>SeomiRegular-Regular — это наоборот очень старое. Почитай например Alexander Stepanov and Paul McJones: Elements of Programming, ну или любую лекцию из старых заметок Степанова по алгоритмам.

ну ясно, получается у меня просто нет соответствующего бэкграунда, или даже хотя бы англоязычной терминологии. Книжку почитаю, откопал на русском
Re[2]: не понимаю c++latest
От: wl. Россия  
Дата: 24.06.25 15:55
Оценка:
Здравствуйте, jamesq, Вы писали:

J>И насколько сильно все эти навороты с концептами и прочими новшествами последних стандартов используются в современных конторах? Насколько надо всё это изучать?

J>По-моему сейчас больше чем C++17 ничего не требуется нигде.

у нас тоже с++20/23 не используется, кажется даже компилятор не поддерживает, но боюсь где-нибудь на собеседованиях всплывет вопрос.
С другой стороны, менять работу страшновато даже, у нас из 25 программистов только я на с++ пишу, похоже другие языки уверенно побеждают в прикладных направлениях
Re[3]: не понимаю c++latest
От: andyp  
Дата: 24.06.25 15:58
Оценка: 1 (1) +1
Здравствуйте, wl., Вы писали:

wl.>ну ясно, получается у меня просто нет соответствующего бэкграунда, или даже хотя бы англоязычной терминологии. Книжку почитаю, откопал на русском


Если тебе только про регулярные типы — глава 1.5 в английском издании. Там пара страниц всего. Если коротко, то полурегулярные типы — типы, значения которых ты можешь присваивать и копировать. Регулярные — еще и сравнивать ==.

PS Ну и да, конструктор по умолчанию должен быть.
Отредактировано 24.06.2025 15:59 andyp . Предыдущая версия .
Re[3]: не понимаю c++latest
От: m2user  
Дата: 24.06.25 17:40
Оценка:
wl.> у нас из 25 программистов только я на с++ пишу, похоже другие языки уверенно побеждают в прикладных направлениях

а остальные на чём?
(ты же вроде системный софт под мобильные устройства пишешь?)
Re[4]: не понимаю c++latest
От: wl. Россия  
Дата: 24.06.25 17:50
Оценка:
Здравствуйте, m2user, Вы писали:

wl.>> у нас из 25 программистов только я на с++ пишу, похоже другие языки уверенно побеждают в прикладных направлениях


M>а остальные на чём?

M>(ты же вроде системный софт под мобильные устройства пишешь?)

на андроиде котлин, вообще без нативных библиотек jni
серверную часть пишут на python, c#
фронт даже не знаю, вроде бы тоже python
база данных — посгресс со своим языком хранимых процедур.
Всё какое-то ненативное в целом
Re[3]: не понимаю c++latest
От: student__  
Дата: 03.07.25 07:15
Оценка:
Здравствуйте, wl., Вы писали:

wl.>С другой стороны, менять работу страшновато даже, у нас из 25 программистов только я на с++ пишу, похоже другие языки уверенно побеждают в прикладных направлениях


Если вы после C++ не в состоянии осилить другой ЯП с другими фреймворками и библиотеками, вам пора либо в руководители, либо на пенсию.
Re[4]: не понимаю c++latest
От: wl. Россия  
Дата: 03.07.25 12:13
Оценка:
Здравствуйте, student__, Вы писали:

__>Здравствуйте, wl., Вы писали:


wl.>>С другой стороны, менять работу страшновато даже, у нас из 25 программистов только я на с++ пишу, похоже другие языки уверенно побеждают в прикладных направлениях


__>Если вы после C++ не в состоянии осилить другой ЯП с другими фреймворками и библиотеками, вам пора либо в руководители, либо на пенсию.


да не, по работе что прикажут, то и выучу. но эффективность будет сильно ниже. Хотя... с появлением ChatGPT может и не сильно ниже
Re[5]: не понимаю c++latest
От: student__  
Дата: 07.07.25 11:51
Оценка:
Здравствуйте, wl., Вы писали:

wl.>да не, по работе что прикажут, то и выучу. но эффективность будет сильно ниже. Хотя... с появлением ChatGPT может и не сильно ниже


обычно специалист сам пробует инструменты, которые ему могли бы помочь в той или иной ситуации, даже если пока нет проектов, где их можно применить.
И вот, кстати говоря, "поменьше использовать С++" вполне себе желание, которое например у меня появилось, когда я более-менее изучил Питон.
Т.е. теперь я сильно подумаю, нужен ли мне C++, тем более если для Питона уже есть нужные батарейки.
Re[6]: не понимаю c++latest
От: LaptevVV Россия  
Дата: 07.07.25 12:34
Оценка:
__>И вот, кстати говоря, "поменьше использовать С++" вполне себе желание, которое например у меня появилось, когда я более-менее изучил Питон.
__>Т.е. теперь я сильно подумаю, нужен ли мне C++, тем более если для Питона уже есть нужные батарейки.
Ну, это от задач зависит.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: не понимаю c++latest
От: fk0 Россия https://fk0.name
Дата: 09.07.25 09:20
Оценка: :)
Здравствуйте, jamesq, Вы писали:

J>По-моему сейчас больше чем C++17 ничего не требуется нигде.


Сейчас при найме требуют три года опыта на C++23.
Re[2]: не понимаю c++latest
От: fk0 Россия https://fk0.name
Дата: 09.07.25 09:22
Оценка:
Здравствуйте, so5team, Вы писали:

S>2. Выбор перегрузки на основании концептов. Т.е. прямая замена техники SFINAE.


Не прямая. У концептов рекурсия не допустима. На практике это означает,
что будешь писать код с концептами и натыкаться на ошибки соответствующего
типа, и не будешь понимать как переписать чтобы без. И тут на сцену выходит
std::enable_if. Опять. И концепт выкидывается.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.