Лекция по decltype/auto и выводу типов в С++11/14
От: Tilir Россия http://tilir.livejournal.com
Дата: 18.05.15 09:01
Оценка: 168 (11) :)
Hi,

Вывод типов это и в 11-м было очень круто, а в C++14 добавили много плюшек.

Не так давно прочитал эту лекцию своим студентам (на неё пришло также немало моих коллег по работе). Вроде всем понравилось. Так получилось, что я её читаю в третий раз и каждый раз она звучит и выглядит иначе, постоянно добавляется или меняется что-то в изложении.

На этот раз решил выложить свои lecture notes на обсуждение более широкого круга людей на этом форуме. Там тринадцать страниц, рассчитано на двухчасовое изложение, так что если не нравится много букв, то вам мимо. Приветствуются замечания, дополнения, исправления, может я что-то забыл или сам где-то недопонял.

P.S. Это конспект для чтения лекции, а не статья. Поэтому к небольшому количеству искрометного юмора (tm) инсайд (чтобы люди совсем уж не спали) прошу отнестись с пониманием. Кроме того, там не проставлены ссылки на источники вдохновения и не везде есть ссылки на стандарт, но я это рано или поздно исправлю.

---
With best regards, Konstantin
Re[4]: Лекция по decltype/auto и выводу типов в С++11/14
От: Tilir Россия http://tilir.livejournal.com
Дата: 17.06.15 08:50
Оценка: 34 (2)
Здравствуйте, Kupaev, Вы писали:

K>Я не знаю, насколько эта идея хороша, но лично мне она нравится. К сожалению, верстка в ворде необходима по чисто техническим причинам — из ворда сразу генерируется XML для верстки и для сайта. Но можно и в другом формате, переверстаем, главное, чтобы формат был текстовым, и чтобы метаданные к статье были.


Выложил статью в чистом тексте без форматирования. Материал соответственно переработан, немного отличается структура, чуть логичней сюжет, есть в каком-то виде список литературы (как смог, правильное цитирование по ГОСТ это боль, никогда не умел, но вроде все источники понятны), нет вольных речевых оборотов.
Re: Лекция по decltype/auto и выводу типов в С++11/14
От: uzhas Ниоткуда  
Дата: 18.05.15 09:30
Оценка: 16 (1)
Здравствуйте, Tilir, Вы писали:

T>Приветствуются замечания, дополнения, исправления, может я что-то забыл или сам где-то недопонял.

1) что такое сгнивалка?
2) какие-то неудачные шрифты в документе, буквы скачут
3) можно было бы добавить еще описание declval и\или полиморфные лямбды
4)

Что будет на экране?

примера в доке я не нашел

в целом, изложение сумбурное
Re: Лекция по decltype/auto и выводу типов в С++11/14
От: Abyx Россия  
Дата: 18.05.15 10:54
Оценка: 16 (1)
Здравствуйте, Tilir, Вы писали:

из этого pdf не копируется текст %)

> стандарт вводит (5.1.2.18) форму decltype с двумя круглыми скобками

5.1.2.18 — это только про лямбда выражения.
на самом деле это 7.1.6.2/4 [dcl.type.simple]

The type denoted by decltype(e) is defined as follows:
— if e is an unparenthesized id-expression or an unparenthesized class member access, decltype(e) is the type of the entity named by e.
— otherwise, if e is an xvalue, decltype(e) is T&&, where T is the type of e;
otherwise, if e is an lvalue, decltype(e) is T&, where T is the type of e;
— otherwise, decltype(e) is the type of e.


> int x;

> typedef decltype(x) xval;
неудачное имя, возникает ассоциация с xvalue

> auto выводит первый попавшийся тип (на самом деле наименьший общий)

общий с чем?

> ((T*)0)->

для этого есть declval
In Zen We Trust
Re[2]: Лекция по decltype/auto и выводу типов в С++11/14
От: Tilir Россия http://tilir.livejournal.com
Дата: 18.05.15 10:59
Оценка: +1
Здравствуйте, uzhas, Вы писали:

U>1) что такое сгнивалка?


Decayer =) Не уверен как лучше перевести decay -- я перевожу как "деградировать" или "сгнить". Ну там "death and decay" (кто играл во второй warcraft, поймет).

U>2) какие-то неудачные шрифты в документе, буквы скачут


latex + usepackage{listings} скачут там где я делаю lstinline, чтобы отличать листнг от просто текста. Хотя я не пробовал смотреть это под виндой, у вас совсем все плохо?

U>3) можно было бы добавить еще описание declval и\или полиморфные лямбды


Это будет в лекции про лямбды. Просто рассказать сразу все нельзя, приходится дозировать. Сейчас у меня порядок такой:

вывод типов --> правые ссылки --> вариабельные шаблоны и кортежи --> лямбды --> constexpr --> потоки и async

(по лекции на каждую тему)

U>

U>Что будет на экране?

U>примера в доке я не нашел

Он одной строчкой выше же. Везде где такой вопрос всегда есть чуть выше код к которому он относится.

U>в целом, изложение сумбурное


Странно я старалася как раз наоборот, чтобы одно логично вытекало из другого. Порекомендуете как переупорядочить?
Re[2]: Лекция по decltype/auto и выводу типов в С++11/14
От: Tilir Россия http://tilir.livejournal.com
Дата: 18.05.15 11:03
Оценка:
Здравствуйте, Abyx, Вы писали:

A>из этого pdf не копируется текст %)


Хм... Не знаю, может это от того, что я выдрал его из основного текста с помощью "печатать в pdf"? Из моего оригинала все копируется. Надо придумать как вырезать лучше.

>> стандарт вводит (5.1.2.18) форму decltype с двумя круглыми скобками

A>5.1.2.18 — это только про лямбда выражения.
A>на самом деле это 7.1.6.2/4 [dcl.type.simple]
A>

A>The type denoted by decltype(e) is defined as follows:
A>— if e is an unparenthesized id-expression or an unparenthesized class member access, decltype(e) is the type of the entity named by e.
A>— otherwise, if e is an xvalue, decltype(e) is T&&, where T is the type of e;
A>— otherwise, if e is an lvalue, decltype(e) is T&, where T is the type of e;
A>— otherwise, decltype(e) is the type of e.


Упс. Спасибо =)

>> typedef decltype(x) xval;

A>неудачное имя, возникает ассоциация с xvalue

На этой лекции они ещё таких слов не знают.

>> auto выводит первый попавшийся тип (на самом деле наименьший общий)

A>общий с чем?

Согласен, тут надо переформулировать.

>> ((T*)0)->

A>для этого есть declval

Пока рано для declval на этой лекции, мне кажется. Он пойдет с лямбдами. Цель этого объяснения -- аргументировать новый синтаксис функций ниже.
Re[3]: Лекция по decltype/auto и выводу типов в С++11/14
От: Zhendos  
Дата: 18.05.15 11:25
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Здравствуйте, Abyx, Вы писали:


A>>из этого pdf не копируется текст %)


T>Хм... Не знаю, может это от того, что я выдрал его из основного текста с помощью "печатать в pdf"? Из моего оригинала все копируется. Надо придумать как вырезать лучше.


На самом деле копируется, но в какой-то неизвестной кодировке (linux/utf-8 locale),
поэтому ее никуда не "вставляется", то что скопировано.
Re[3]: Лекция по decltype/auto и выводу типов в С++11/14
От: uzhas Ниоткуда  
Дата: 18.05.15 11:29
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Decayer =) Не уверен как лучше перевести decay -- я перевожу как "деградировать" или "сгнить". Ну там "death and decay" (кто играл во второй warcraft, поймет).

с переводами беда..но текущий перевод забавный ))

T>latex + usepackage{listings} скачут там где я делаю lstinline, чтобы отличать листнг от просто текста. Хотя я не пробовал смотреть это под виндой, у вас совсем все плохо?


виноват, проблема локальная (на винде)
https://monosnap.com/file/TTW26BgoOM0I3Jjph43p7k9iGpYs1j

T>Он одной строчкой выше же. Везде где такой вопрос всегда есть чуть выше код к которому он относится.

виноват, невнимательно читал

T>Странно я старалася как раз наоборот, чтобы одно логично вытекало из другого. Порекомендуете как переупорядочить?


ну это следствие

Это конспект для чтения лекции, а не статья

Re: Лекция по decltype/auto и выводу типов в С++11/14
От: LaptevVV Россия  
Дата: 18.05.15 19:06
Оценка:
T>На этот раз решил выложить свои lecture notes на обсуждение более широкого круга людей на этом форуме. Там тринадцать страниц, рассчитано на двухчасовое изложение, так что если не нравится много букв, то вам мимо. Приветствуются замечания, дополнения, исправления, может я что-то забыл или сам где-то недопонял.
А там страницы — 207 и далее.
Это — книжка будет?
Жду с нетерпением!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Лекция по decltype/auto и выводу типов в С++11/14
От: andyp  
Дата: 26.05.15 13:16
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Здравствуйте, uzhas, Вы писали:


U>>1) что такое сгнивалка?


T>Decayer =) Не уверен как лучше перевести decay -- я перевожу как "деградировать" или "сгнить". Ну там "death and decay" (кто играл во второй warcraft, поймет).


Мне кажется, в данном случае лучше не переводить, а пояснить, что std::decay делает с типами аргументов то же самое, что происходит с типами аргументов при вызове функции. Удачный и короткий русский аналог придумать трудно. Заодно у студента появится шанс повторить преобразования типов и вспомнить, что у кого при этом отваливается, а к кому что наоборот прирастает.
Re: Лекция по decltype/auto и выводу типов в С++11/14
От: Kupaev Россия www.rsdn.ru
Дата: 28.05.15 18:31
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Hi,


T>Вывод типов это и в 11-м было очень круто, а в C++14 добавили много плюшек.


Как насчет превратить это в статью в журнал и на сайт?
Re[2]: Лекция по decltype/auto и выводу типов в С++11/14
От: Tilir Россия http://tilir.livejournal.com
Дата: 29.05.15 09:38
Оценка:
Здравствуйте, Kupaev, Вы писали:

K>Как насчет превратить это в статью в журнал и на сайт?


Мне для этого нужно несколько переработать текст -- убрать элементы разговорного жанра, лучше структурировать, выверить ссылки на использованные источники и на стандарт, может быть несколько расширить. Если вы считаете публикацию такой статьи хорошей идеей, то почему бы и нет. Единственное, что меня несколько пугает -- требования по верстке в ворде... Я как-то привык к latex.
Re[2]: Лекция по decltype/auto и выводу типов в С++11/14
От: Tilir Россия http://tilir.livejournal.com
Дата: 29.05.15 09:40
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>А там страницы — 207 и далее.

LVV>Это — книжка будет?

Первые двести страниц -- типовое изложение C++ для студентов, знающих C. Мне просто проще читать по написанному мной самим конспекту. Последние сорцы всегда можно выкачать и собрать с sourcefogre, там же валяется какая-то pdf-ка, но не слишком актуальная.
Re[3]: Лекция по decltype/auto и выводу типов в С++11/14
От: LaptevVV Россия  
Дата: 29.05.15 14:51
Оценка:
T>Первые двести страниц -- типовое изложение C++ для студентов, знающих C. Мне просто проще читать по написанному мной самим конспекту. Последние сорцы всегда можно выкачать и собрать с sourcefogre, там же валяется какая-то pdf-ка, но не слишком актуальная.
Спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Лекция по decltype/auto и выводу типов в С++11/14
От: Kupaev Россия www.rsdn.ru
Дата: 08.06.15 16:10
Оценка:
Здравствуйте, Tilir, Вы писали:

K>>Как насчет превратить это в статью в журнал и на сайт?


T>Мне для этого нужно несколько переработать текст -- убрать элементы разговорного жанра, лучше структурировать, выверить ссылки на использованные источники и на стандарт, может быть несколько расширить. Если вы считаете публикацию такой статьи хорошей идеей, то почему бы и нет. Единственное, что меня несколько пугает -- требования по верстке в ворде... Я как-то привык к latex.


Я не знаю, насколько эта идея хороша, но лично мне она нравится. К сожалению, верстка в ворде необходима по чисто техническим причинам — из ворда сразу генерируется XML для верстки и для сайта. Но можно и в другом формате, переверстаем, главное, чтобы формат был текстовым, и чтобы метаданные к статье были.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.