68942

Inline функції

Лекция

Информатика, кибернетика и программирование

Визначення функцій що підставляються усередині класу Мова C володіє важливою властивістю: у нім існують функції inline functions що підставляються які широко використовуються в класах. Щоб замінити виклик функції підстановкою перед її визначенням слід вказати слово inline.

Украинкский

2014-09-27

36.5 KB

0 чел.

Лекція № 4

Тема: Inline функції

План:

  1.  Inline функції

2. Визначення функцій, що підставляються, усередині класу

 

Мова C++ володіє важливою властивістю: у нім існують функції (inline functions), що підставляються, які широко використовуються в класах. Можна написати коротку функцію, яка не викликається, а підставляється у відповідне місце програми. Цей процес нагадує функціональну макропідстановку. Щоб замінити виклик функції підстановкою, перед її визначенням слід вказати слово inline. Наприклад, в наступній програмі функція мах () не викликається, а підставляється.

#include <iostream>

using namespace std;

inline int max(int а, int b)

{

return a>b ? а : b;

}

int main() {

cout « max(10, 20);

cout « " " « max(99, 88);

return 0;

}

З погляду компілятора ця програма виглядає так.

include <iostream>

using namespace std;

 

int main() {

cout « (10>20 ? 10 : 20);

cout « " " « (99>88 ? 99 : 88);

return 0;

}

Функції, що підставляються, дозволяють створювати дуже ефективні програми. Оскільки класи зазвичай містять декілька інтерфейсних функцій, які часто викликаються для доступу до його закритих членів, необхідно, щоб ці функції виконувалися щонайшвидше. Як відомо, кожен виклик функції зв'язаний з додатковими витратами на передачу і повернення управління. Зазвичай при виклику функції її аргументи заштовхуються в стек, а вміст регістрів копіюється в оперативну пам'ять, щоб після повернення управління можна було відновити первинний стан програми. На ці операції витрачається додатковий час. Проте, якщо замість виклику тіло функції просто підставляється в програму, нічого цього не вимагається. На жаль, прискорення роботи програми досягається за рахунок збільшення розміру коду, оскільки тіло функції, що підставляється, дублюється кілька разів. Функції, що з цієї причини підставляються, повинні бути дуже маленькими. Крім того, підставляються слід робити тільки ті функції, швидкодія яких дійсно істотно впливає на ефективність програми.

Як і специфікатор register, ключове слово inline є лише рекомендацією, а не наказом компілятору. В деяких випадках компілятор може його проігнорувати. Крім того, деякі компілятори обмежують категорії функцій, які можуть бути такими, що підставляються. Зокрема, як правило, компілятори не дозволяють підставляти рекурсивні функції. У кожному конкретному випадку інформацію про обмеження на застосування функцій, що підставляються, слід шукати в документації, супроводжуючій компілятор. Врахуйте, якщо функцію не можна підставити, вона викликатиметься.

Функції, що підставляються, можуть бути членами класу. Наприклад, наступна програма вважається цілком коректною.

#include <iostream>

using namespace std;

class myclass {

int а, b; public:

void init(int i, int j);

void show();

};

// Створити функцію, що підставляється,

inline void myclass::init(int i, int j)

{

а = i;

b = j;

}

// Створити іншу функцію, що підставляється.

inline void myclass::show()

{

cout « а « " " « b « "\n";

}

 

int main() {

myclass x;

x.initdO, 20); x.show();

return 0;

}

Ключове слово inline не є частиною мови С. Отже, воно не визначене в стандарті С89, але включене в стандарт С99.

Визначення функцій, що підставляються, усередині класу

Коротку функцію можна визначити безпосередньо усередині оголошення класу. Якщо функція визначена усередині оголошення класу, вона автоматично перетворюється на ту, що підставляється (якщо це не перечить обмеженням компілятора). Указувати при цьому ключове слово inline абсолютно не обов'язково, хоча помилкою це не вважається. Наприклад, попередню програму можна переписати, помістивши визначення функцій init() і show() у оголошення класу myclass.

#include <iostream>

using namespace std;

class myclass {

int а, b; public:

// Автоматична підстановка

void init(int i, int j) { a=i; b=j; }

void show() { cout « а « " " « b « "\n"; }

};

int main() {

myclass x;

x.initdO, 20);

x.show();

return 0;

}

Зверніть увагу на спосіб запису тіла функції усередині оголошення класу myclass. Оскільки функції, що підставляються, зазвичай короткі, такий прийом цілком типовий. Проте абсолютно необов'язково записувати функції саме так. Наприклад, оголошення функції myclass можна переписати інакше.

include <iostream>

using namespace std;

class myclass {

int а, b; public:

// Автоматична підстановка

void init(int i, int j)

{

а  =   i; b  =   j; }

void show() {

cout <<  а <<   "   "   << b «   "\n";

}

};

З технічної точки зору підстановка функції show() не має сенсу, оскільки час, що витрачається на уведення-виведення, набагато перевищує час, необхідний для виклику функції. Проте переважна більшість програмістів вважають за краще поміщати всі короткі функції-члени усередині оголошення класу. (Украй рідко в професійних програмах можна зустріти короткі функції-члени, визначені зовні оголошення класу.)

Конструктор і деструкція можуть бути такими, що підставляються або за умовчанням, якщо вони визначені усередині оголошення класу, або явно.


 

А также другие работы, которые могут Вас заинтересовать

25743. Российская информационная инфраструктура 19.57 KB
  Компьютерная количество ПК на душу населения; количество ПК на семью; количество ПК установленных в государственном секторе и в коммерческих структурах; количество ПК для учебных заведений; ПК объединенных в сети; расходы на компьютерное оборудование и программное обеспечение ПО. Информационная количество телефонных линий на семью; количество сбоев на линии; стоимость переговоров на местных линиях; количество сотовых телефонов на душу населения; количество телевизоров на душу населения; число абонентов кабельного ТВ....
25744. Профессионально-этические правила и нормы в деятельности журналиста 31.71 KB
  Профессиональноэтические правила и нормы в деятельности журналиста Со времени появления независимой журналистики у нас в стране этические вопросы её существования становятся всё острее. В нашем обществе успел уже сформироваться негативный образ жёлтой прессы продажных журналистов и просто журналюг. С одной стороны журналистика считается престижной профессией. С другой стороны сохраняется откровенно настороженное отношение к журналистам со стороны не только персон которые могут объектами журналистского профессионального интереса но...
25747. Анализ структуры и динамики себестоимости продукции 27 KB
  Анализ структуры затрат на производство начинается с определения удельных весов в процентах отдельных элементов затрат в общей сумме затрат и их изменения за отчетный период. Наиболее общим для многих отраслей элементами затрат являются: материальные трудовые расходы на оплату труда отчисления на социальные нужды амортизация и прочие расходы в состав которых включаются все остальные затраты не отраженные в предыдущих элементах. Изучение структуры затрат по этим элементам а при необходимости и по важнейшим составным их частям а также...
25748. Анализ учетной (бухгалтерской) и экономической рентабельности 28.5 KB
  Исследование показателя прибыли во взаимосвязи с показателями выручки от продаж затрат активов собственного акционерного уставного капитала представляет возможность оценить эффективность деятельности организации привлечения дополнительного капитала и заемных средств. Показатели рентабельности прибыльности оценивают величину прибыли полученной с каждого рубля средств вложенных в активы и деятельность организации. затратоотдача или рентабельность основной деятельности определяется отношением прибыли от продаж к сумме затрат на...
25749. Анализ финансовой устойчивости 30 KB
  Абсолютными являются показатели характеризующих степень обеспеченности запасов источниками их формирования. Для характеристики источников формирования запасов определяют три основных показателя: 1. наличие долгосрочных источников формирования запасов определяется путем увеличения суммы собственных оборотных средств на сумму долгосрочных обязательств; 3. общая величина основных источников формирования запасов определяется путем увеличения предыдущего показателя на сумму краткосрочных кредитов и займов.
25750. Аудит денежных средств и расчетов с подотчетными лицами 32 KB
  № 4 Главная книга Журнал ордер № 7 синтетический аналитический учет Основанные задачи аудиторской проверки является Проверка соответствия лиц получающих наличные деньги из кассы на хозяйственные операции расходы со списком лиц имеющих на это право и утвержденному руководителем предприятия. Проверка получения подотчетных сумм денежных средств лицами не отчитавшимися за ранее полученному авансу в течение 3 дня Проверка соответствия фактических подотчетных сумм с целями на которые они были выданы Проверка подотчетных лиц на наличие в...
25751. Аудит кассовых операций 51 KB
  Цель аудита кассовых операций: установление соответствия применяемой в организации методики бух учета действующей в проверяемом периоде и нормативным документам. проверка своевременного и полного отражения в БУ операций с ДС при соблюдении требований законодательства 2. правильное документальное оформление операций с ДС контроль за сохранностью ДС документов в кассе 3.