Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
41 слайд
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
306.02 kB
Просмотров:
71
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img0.jpg)
№2 слайд![Перегрузка метода по](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img1.jpg)
Содержание слайда: Перегрузка метода по категории значения объекта
Для перегрузки метода по категории значения объекта используются символы & и &&
№3 слайд![Перегрузка метода по](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img2.jpg)
Содержание слайда: Перегрузка метода по категории значения объекта
№4 слайд![Вывод типов шаблонов](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img3.jpg)
Содержание слайда: Вывод типов шаблонов
Компилятор использует expr для вывода двух типов: T и ParamType
№5 слайд![Три возможные ситуации при](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img4.jpg)
Содержание слайда: Три возможные ситуации при выводе типа шаблона
Тип выводимый для T зависит не только от expr, но и от ParamType
№6 слайд![Случай ParamType ссылка или](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img5.jpg)
Содержание слайда: Случай 1: ParamType ссылка или указатель, но не универсальная ссылка
Правила вывода:
Если тип expr – ссылка, то ссылочная часть игнорируется
Затем тип expr сопоставляется с типом ParamType и выводится тип T
№7 слайд![Случай ParamType ссылка или](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img6.jpg)
Содержание слайда: Случай 1: ParamType ссылка или указатель, но не универсальная ссылка
Другой пример:
№8 слайд![Случай ParamType ссылка или](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img7.jpg)
Содержание слайда: Случай 1: ParamType ссылка или указатель, но не универсальная ссылка
С указателями все работает точно также:
№9 слайд![Путаница с T amp amp В С](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img8.jpg)
Содержание слайда: Путаница с T&&
В С++ существует небольшая путаница насчет T&&, так как в разных контекстах оно может обозначать rvalue – ссылки и универсальную ссылку. Например:
№10 слайд![Универсальные ссылки краткий](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img9.jpg)
Содержание слайда: Универсальные ссылки / краткий обзор
Если T&& является универсальной ссылкой, то она может быть как lvalue – ссылкой, так и rvalue – ссылкой. Такая ссылка может возникнуть только в шаблонном коде, либо в auto при выводе типов.
Правила вывода для универсальных ссылок:
Если expr – lvalue, то и T, и ParamType выводятся как lvalue – ссылки. Это единственная ситуация, где T может быть ссылкой.
Если expr – rvalue, то применяются «обычные» правила из ситуации 1
№11 слайд![Случай ParamType](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img10.jpg)
Содержание слайда: Случай 2: ParamType универсальная ссылка
№12 слайд![Случай ParamType не ссылка и](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img11.jpg)
Содержание слайда: Случай 3: ParamType не ссылка и не указатель
Правила вывода:
Если тип expr – ссылка, то ссылочная часть игнорируется
Если expr – const, игнорировать константность
№13 слайд![Случай ParamType не ссылка и](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img12.jpg)
Содержание слайда: Случай 3: ParamType не ссылка и не указатель
Для переданных указателей игнорируется только const, который говорит, что указатель не может указывать ни на что другое, второй const сохраняется
№14 слайд![Запомнить При выводе типа в](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img13.jpg)
Содержание слайда: Запомнить
При выводе типа в шаблонах, ссылочные фактические параметры трактуются как не ссылочные
При выводе типа с формальным параметром – унверсальной ссылкой lvalue аргументы трактуются не обычным путем
При выводе типа для формального параметра «по значению» модификатор const игнорируется
№15 слайд![Что будет выведено на экран и](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img14.jpg)
Содержание слайда: Что будет выведено на экран и почему?
№16 слайд![Reference Wrapper std ref T](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img15.jpg)
Содержание слайда: Reference Wrapper
std::ref(T&) – находится в <functional> и может неявно приводится к (T&)
№17 слайд![Вывод типа для auto Правила](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img16.jpg)
Содержание слайда: Вывод типа для auto
Правила вывода типа для auto точно такие же, как и для шаблонов с одним исключением. Посмотрим примеры:
№18 слайд![Исключение для вывода типа](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img17.jpg)
Содержание слайда: Исключение для вывода типа auto
Вспомним варианты синтаксиса инициализации
№19 слайд![Синтаксис - функции замыкания](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img18.jpg)
Содержание слайда: Синтаксис λ - функции / замыкания
[capture] (params) mutable exception_attribute ret_type { body }
[capture] (params) ret_type { body }
[capture] (params) { body }
[capture] { body }
№20 слайд![Сapture - функции Этот раздел](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img19.jpg)
Содержание слайда: Сapture λ - функции
Этот раздел λ - функции позволяет захватывать внешние переменные как по значению, так и по ссылке
Возможные варианты:
[a, &b] – а захвачено по значению, b – по ссылке
[this] – захватывает указатель this текущего объекта
[&] – захватывает все локальные переменные по ссылке
[=] – захватывает все локальные переменные по значению
№21 слайд![Правила вывода возвращаемого](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img20.jpg)
Содержание слайда: Правила вывода возвращаемого значения λ - функции
(до С++14)
Если функция состоит из одной строчки return, то компилятор выводит тип возвращаемого значения по этой строчке, иначе – тип возвращаемого значения void.
(c С++14)
Компилятор находит строчку с return и выводит тип возвращаемого значения из неё
№22 слайд![Тип - функции Тип - функции](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img21.jpg)
Содержание слайда: Тип λ - функции
Тип λ - функции знает только компилятор, но это не значит, что мы не можем хранить её в переменной, type - deduce позволяет нам работать с ним, не зная его.
№23 слайд![Пример - функции](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img22.jpg)
Содержание слайда: Пример λ - функции
№24 слайд![Пример - функции](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img23.jpg)
Содержание слайда: Пример λ - функции
№25 слайд![Пример захвата переменных](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img24.jpg)
Содержание слайда: Пример захвата переменных
№26 слайд![Пример захвата переменных](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img25.jpg)
Содержание слайда: Пример захвата переменных
№27 слайд![Для С сказочка с выводом auto](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img26.jpg)
Содержание слайда: Для С++11 сказочка с выводом auto - типов закончилась
А вот С++14 расширяет возможность использования auto, позволяя использовать auto в возвращаемых значениях функций и в формальных параметрах λ – функций.
Причем в этих контекстах вывод типа для auto совсем ничем не отличается от шаблонного вывода
№28 слайд![auto в параметрах функций](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img27.jpg)
Содержание слайда: auto в параметрах λ – функций
№29 слайд![Decltype вывод типов Decltype](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img28.jpg)
Содержание слайда: Decltype вывод типов
Decltype объявляет тип, как auto, но по выражению, переданному в него
Синтаксис:
decltype(expr)
№30 слайд![Примеры очевидного поведения](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img29.jpg)
Содержание слайда: Примеры очевидного поведения decltype
№31 слайд![Правила вывода decltype](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img30.jpg)
Содержание слайда: Правила вывода decltype
1) Насколько возможно не изменять тип своего аргумента
2) Для lvalue выражения типа T отличного от простого имени объекта всегда выводится T&
№32 слайд![Использование decltype в С В](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img31.jpg)
Содержание слайда: Использование decltype в С++11
В С++11 decltype наиболее часто использовался в шаблонных функциях, где тип возвращаемого значения зависел от передаваемых им аргументов.
№33 слайд![Trailing return type syntax](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img32.jpg)
Содержание слайда: Trailing return type syntax
№34 слайд![В С мы можем избежать такого](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img33.jpg)
Содержание слайда: В С++14 мы можем избежать такого синтаксиса
Но, к сожалению, следующий вызов не скомпилируется (почему?)
№35 слайд![Исправляем auto c правилами](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img34.jpg)
Содержание слайда: Исправляем: auto c правилами decltype
А как быть с таким вариантом? (Не Visual Studio)
№36 слайд![Исправляем добавляем](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img35.jpg)
Содержание слайда: Исправляем: добавляем универсальную ссылку
№37 слайд![Perfect forwarding Какой](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img36.jpg)
Содержание слайда: Perfect forwarding
Какой недостаток у данной функции?
№38 слайд![Perfect forwarding Если arg](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img37.jpg)
Содержание слайда: Perfect forwarding
Если arg lvalue – перемещения не будет
Если arg rvalue – перемещение будет
№39 слайд![Теперь вернемся к примеру с](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img38.jpg)
Содержание слайда: Теперь вернемся к примеру с authAndAccess
№40 слайд![](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img39.jpg)
№41 слайд![На этом всё](/documents_6/a07991fed8b9c03f47764dd78c2d792f/img40.jpg)
Содержание слайда: На этом всё