Step 8 (S-11072)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/560/step/8

Step 8 (S-11072) 1.png

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


[00:17 - 00:36] подстраиванием поднимается замена формально вызова функции на тело этой функции давайте пытаюсь объяснить настоящем простом примере пусть нас есть некоторое очень простая функции например за день в квадрат тело этой функции состоит из 1 если назвать эту функцию


[00:36 - 00:52] как любую другую функцию то есть так как я объяснял на 1 из 1 лекций складывания параметры на стек передвигаться так поинтер разворачиваясь так сворачивая копировать зачем назначен так далее


[00:52 - 01:09] при этом придет множество накладных расходов для данной функции это довольно серьезно самого он состоит из 1 умножения накладных расходов там довольно много получается что накладные расходы здесь по своей стоимости


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


[01:23 - 01:39] для того чтобы подсказать компилятору что там довольно проста и ключевое слово ничего чтобы она наклоняет также некоторые ограничения если функция объявлена отключен слово то вместе ее вызова


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


[01:55 - 02:12] встретим то в нем вместо вызова не будет известно определения таким образом данная функция там вызвано быть насчет зачем нужно тела в момент вызова для того чтобы понять как или устраивал то есть если написано что функция


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


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


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


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


[03:17 - 03:33] методы уже подчеркивание касается тех методов которые определены прямо внутри объявления класс прием ковке из всех версий и 0 функции да ну как обычно функциональным тобой скомпилирован каждый раз


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


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


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


[04:27 - 04:43] ты должен быть идентична важный момент последней но в действительности 1 из самых важных это то что ничего чтобы этот совет компилятор


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


[04:59 - 05:14] теоретически невозможно устроить и жамкать сложно и более сложную рекурсию то есть в принципе слово это некоторый совет компилятором и зачастую используется не для того чтобы


[05:14 - 05:30] подсказать компилятору что данная функция точно просто и то есть компилятор довольно умный и он сам для некоторых функций понимает что может их строить америка 5 довольно хорошо умеет оптимизировать ну современные компиляторы они очень умные слова


[05:30 - 05:48] очень часто используется просто для того чтобы описать внутри заголовочный не разбивайте на объявление заголовочном файле и реализацию где то отдельно а прямо сразу же описать ее в заголовочном файле таким образом можно реализовывать целых большой библиотеки


[05:48 - 06:05] которая состоит только из заголовочных файлов все функции определять прямо в заголовочных файлах но для того чтобы не было ошибок при линковке используется


[06:05 - 06:21] вот такие боатенг есть некоторые проблемы ну понятно но с 1 стороны этот а получили очень удобную конструкцию чем то мы должны поплатиться оплатим все мы временем компиляции за счет того что


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


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


[06:55 - 06:57] * Audio is not recognized *