Здесь рассмотрен только 1 уровень приведеня и вывода типов а он может быть выше например 2-й, 3-ий и тд. Например двойные указатели указатели на ссылку двойые указатели на ссылку. Но у ссылок уровень всегда 1-ый. Т.е. вы не можете написать вот так int &**&*&&a; Так нельзя. Ссылку можно написать только так. int **&a; или int ****&a; Но даже int &*a; нет... Ссылка(двойная ссылка или правая как её принято называть) всегда последняя. А вот квалификаторы const можно расставлять произвольно как и volftile. Получаются довольно сложные конструкции. Но тут есть логика которая прослеживается но о которой почему-то не сказано, хотя рассказано довольно подробно. Но на практике так не делают, а руководствуются как раз тем о чём не говорили. Но это уже другой уровень понимания. Если вы его достигли то все эти правила можете выкинуть они автоматом оттуда следуют. Вы их сами всегда можете выписать и даже намного больше и сложнее. Так что учитесь и обрящете.
@kpanat Жыл бұрын
Да это должно быть на уровне чувств вы должны ощущать какой тип будет и это должно быть автоматом без вопросов. Иначе что же вы каждый раз будете сверятся с табличкой и смотреть а какой же тип там получится... и пока так не будет у вас проблемы... Учите, повторяйте это сколько надо раз пока вы нутром чувствовать не будете какой там тип будет. Ой...
@theK0sh5 жыл бұрын
Наверное, сначала нужно было отдельный слайдом рассказать о правилах свертки ссылок (reference collapsing), а потом уже на основе этих знаний говорить о выводе аргументов шаблона в вызовах шаблонных функций и о правилах вывода типов для auto и decltype. Возможно, было бы понятней для тех кто мало знаком с темой. Так же возможно стоило отдельно вначале объяснить о низводящих (decay) преобразованиях, которые происходят для параметров, объявленных по значению, рассказать о низведенных типах. Это позволило бы дать более формальное объяснение того, почему, например отбрасываются ссылки или константность.
@PVSStudioTool5 жыл бұрын
Спасибо за комментарий. Тема довольно сложная, поэтому могли упустить некоторые детали повествования. Учтем при записи следующих образовательных видео.
@user-wu3vd7dd2r4 жыл бұрын
Филипп, 26:50 кастуем к Rvalue же да? или я не прав?
@PVSStudioTool4 жыл бұрын
Не совсем. Нужно запомнить одно правило - когда в коде видим/пишем T &&, где T - это шаблонный параметр, то такая ссылка называется forwarding-ссылкой (Скотт Мейерс ее называл универсальной ссылкой до того, как утряслась официальная терминология). Соответственно, кастуем мы к forwarding-ссылке. Однако затем, когда дело дойдет до инстанцирования, такая ссылка превратится либо в левую, либо в правую после вывода типов в результате свертки ссылок (reference collapsing).
@tertiumorganum5665 Жыл бұрын
ребят, что за сложности выложить в телеге презентацию? не, понятно, у меерса все есть, но блин. в вк нифига не пашет, ругается: группа не та
@PVSStudioTool Жыл бұрын
Выложили лекции с презентациями) Спасибо за идею)
@ДмитрийСадков-е8ц2 жыл бұрын
На слайде про decltype(auto) kzbin.info/www/bejne/jHaWmKJtpsh6ZpY судя по всему есть опечатка. decltype(auto) v9 = foo(); // int ()(), compile-time error decltype(auto) v10 = bar(); // int&& ()(), compile-time error должно быть decltype(auto) v9 = foo; // int ()(), compile-time error decltype(auto) v10 = bar; // int&& ()(), compile-time error
@PVSStudioTool2 жыл бұрын
Да, там действительно опечатка. Спасибо за прозорливость)
@АртёмПопов-у2н Жыл бұрын
Видео про то, как чел с умным видом ведущего разработчика пересказывает свой конспект на первую главу книги Майерса "Эффективный и современный С++11/14". Не понятно на кого рассчитан данный материал: если на новичков, то завершающая фраза "Всё просто!" звучит как троллинг, если на опытных разработчиков, то ничего нового не рассказано. Ещё раз: это просто пересказ "удар в удар" (даже примеры идентичны), этакая аудио-версия. Видео можно было сократить до 10 секунд записав на нём: "Про вывод типов в C++ читайте первую главу у Майерса в книге (см. выше), там рассказано то, что я бы мусолил 53 минуты. Всё просто!"