Step 7 (S-11552)

From Stepik Wiki
Revision as of 13:12, 7 August 2017 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/567/step/7

Step 7 (S-11552) 1.png

[00:00 - 00:16] давайте обсудим как происходит компиляция шаблонов си + + каждый шаблон отдельной независимой компилируется для каждого набор шаблонных параметров которые он использует компилятор шаблоны для конкретного набора шаблонных параметров называется инстанцирования шаблон


[00:16 - 00:33] такая компиляция происходит в точке 1 использования данного шаблона набором шаблонов такую точку называют точка инстанцирования шаблон например если у нас в программе используется re double то


[00:33 - 00:50] точка в которой данный массив он упоминается в 1 раз например определение переменной типа double массив из 10 лет такой поминание будет точка инстанцирования


[00:50 - 01:05] шаблон для если где то дальше будем использовать р и это будет 1 упоминанием то это будет точка инстанцирования шаблона для тебя


[01:05 - 01:20] если мы после этого снова придем к этому моменту компилятор уже будет иметь скомпилированный код а double и ему ничего интереснее придет


[01:20 - 01:40] важно отметить что компиляция шаблонов ленивая это значит что компилируется только те методы которые вызывают более того каждый метод по сути является шаблонной функции то есть у него тоже есть своя точка инстанцирования точка инстанцирования место в котором впервые вызывается


Step 7 (S-11552) 2.png

[01:40 - 01:58] например если у типа эры мы не будем вызывать никаких дополнительных методов будем просто определять переменная типа эры double и дальше про не забывать то для данного типа будет скомпилирована всего 2 м то это будет конструктор причем конструктор от количества элементов которые вызываются вот здесь


Step 7 (S-11552) 3.png

[01:58 - 02:16] при определении переменной типа оператор не деструктор но деструктор в какой то он будет вызван либо при выходе из функции которые то переменные определены при выходе из программы если эта переменная к напали таким образом если в каких то других методах вас есть ошибки ну например


[02:16 - 02:35] там делается некоторые фразы которые для да было неопределенным например вызов метода значение типа да то данный метод не будет скомпилирован для типа double и ошибка неправильно это довольно частая ситуация когда вы пишете некоторых шаблоны просто думаете что он работает но на самом деле просто какие то методы некому


[02:35 - 02:50] то есть синтаксический они должны быть правильными но никто не проверяет что при конкретном типе t этот метод имеет какой то начальник то типа double все будет работать об этом надо помнить если вы хотите


[02:50 - 03:09] явно протестировать ваш шаблон и класс надо проверить что все это вызывает числительных компилируется все с ними хорошо следующий важный момент в точке инстанциирование шаблона шаблон должен быть полностью определен откуда берется такой 3


[03:09 - 03:25] дело в том что для того чтобы инстанцировать шаблон для конкретного значения шаблонных параметров компилятору нужно сделать следующие и мы должны дать определение шаблонного заменить формальная шаблонный параметр на конкретных значений этих шаблонов параметров и скомпилировать этот шаблон


[03:25 - 03:41] таким образом в точке лицензирования компилятору необходимо знать полное определение поэтому вас не получится разделить шаблона объявлений в заголовочном файле и определения вступивших если вы хотите использовать его более чем в 1 файле


[03:41 - 04:00] поэтому шаблоны следует определять заголовочный файл для того чтоб это доставляло меньше проблем все шаблонные функции и шаблонный методы по умолчанию являются иной важно отметить также что компиляция различных единицах трансляции происходит независимо


[04:00 - 04:09] то есть каждая единица трансляции для каждого шаблона и каждый набор шаблонов параметрам в котором используется будет своя точка инстанцирования