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

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


 

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

53023. Формування соціально-комунікативної активності молодших школярів на уроці 123.5 KB
  Мета роботи полягає в обґрунтуванні, виявленні та вивчені соціально-педагогічних умов, які забезпечують високу ефективність формування соціальної активності в молодших школярів.
53024. Формування інформатичної компетентності молодших школярів у контексті викликів сьогодення, використовуючи метод дослідження 116.5 KB
  Використовуючи інтелектуальне навчання та метод дослідження дітям пропонується дібрати самостійно або з батьками слова задані на певну букву. В класі вивішується планшет де діти вписують дібрані слова або добирають малюнки це можуть бути змагання між хлопчиками і дівчатками рядами групами різноманітні проектні роботи кінцевими результатами яких будуть книжки В гості до букви . Чим схожі всі ці слова Буква ел іменники назви тварин назви істот Доберіть синонім до слів: крокодил алігатор гавіал лисиця песець ...
53025. Підсумковий урок з розділу «Форма в образотворчому мистецтві» 315.5 KB
  Отож ви в класі поділились на три команди: Веселі акварелі олівцімолодцівеселкова палітра. На додатковій дошці я буду записувати бали отримані в ході урокугриа в кінці уроку за сумою балів кожної команди визначимо переможців. На учасників командипереможниці чекають нагороди Правила гри: кожен конкурс чи завдання оцінюється 13 балами; команда вирішує хто буде відповідати чи виконувати художнє завдання;...
53026. Об'ємна форма у відкритому просторі. «Камінь, що оживає» 122 KB
  Мета: ознайомити з творчістю українського художника – скульптора Олега Пінчука; створити оригінальний скульптурний образ на основі узагальнення, стилізації й трансформації реальних об'єктів з урахуванням розташування скульптури в місцях відпочинку та розваг дітей; учити передавати основний характер об'ємної форми; розвивати асоціативно-образне та просторове мислення, уяву, фантазію...
53027. Формули скороченого множення та узагальнення на основі квадрата двочлена 908 KB
  Мета: Узагальнити і систематизувати знання, вміння та навички у застосуванні формул квадрата двочлена і різниці квадратів. Вивести формули квадрата тричлена, куба двочлена. Розвивати вміння узагальнювати, робити висновки. Сприяти розвитку логічного мислення, математичної мови.
53028. Формула коренів квадратного рівняння. Розв’язування вправ 87 KB
  Мета: удосконалити вміння розвязувати квадратні рівняння за допомогою формули коренів квадратного рівняння; розвивати математичну мову; виховувати активність інтерес до нових знань і прагнення їх набути. Очікувані результати: учні на кінець уроку повинні: обчислювати дискримінант квадратного рівняння; розвязувати квадратні рівняння за допомогою формули коренів квадратного рівняння; Хід уроку І. Яка з наведених формул є формулою коренів квадратного рівняння А Б В Г 3.
53029. Формули подвійного аргументу 178.5 KB
  Мета: - на основі формул додавання вивести формули подвійного аргументу; - закріпити знання цих формул під час розвязування вправ; - розвивати вміння порівнювати, самостійно мислити; - виховувати інтерес до математики, удосконалювати навички самоконтролю.
53030. Формулы сокращенного умножения 49.5 KB
  Учитель математики Сегодня наш урок посвященный формулам сокращенного умножения не совсем обычный: мы будем его проводить вместе с вашим учителем русского языка. Учитель русского языка Для начала я хочу представить наше справочное бюро группа учащихся. Учитель математики А сейчас мы назначим несколько человек из класса экспертами. Учитель русского языка Что же такое эксперт Обратимся к нашему справочному бюро.
53031. Формули зведення 171.5 KB
  Тригонометричні функції зв’язані між собою великою кількістю співвідношень. Але не завжди їх треба зазубрювати, можливо достатньо володіти ланцюжком міркувань, тобто певним алгоритмом, щоб спростити даний вираз. Алгебра щедра, вона часто дає більше, ніж у неї просять, так стверджував великий математик Д′Аломберг. Сподіваюсь, що наш урок буде тому підтвердженням.