Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцій.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
1.12 Mб
Скачать

1.8 Специфікатор inline

Використовується для того , щоб компiлятор помiщав код функцiї безпо -середньо в місце її виклику. При цьому зростає швидкодія програми, проте і збільшується об’єктний код.

Приклад:

void notinline (void)

{ }

inline void isinline (void)

{ }

main()

{ printf("starting notinline \n");

for (long i=1;i<5000000;i++) notinline ();

printf ("starting isinline\n");

for (i=1;i<5000000;i++)isinline ();}

З isinline функцiя виконується в кілька разiв швидше.

1.9 Операції new та delete .

Операція new служить для виділення пам’яті. Синтаксично допускається 3 способи її використання :

1. new type_name

Приклад: float *r=new float;

При такому оголошенні r буде вказівником на значення типу float, причому вказувати він буде на початок вже виділеної області пам’яті розміром float, на відміну від оголошення float *r; , де пам’ять не виділяється.

2. new (type_name)

Приклад: float*r=new(float);

Цей випадок аналогічний попередньому.

3. new type_name [expression]

Приклад: float*r=new float [20];

Операція Delete служить для звільнення пам’яті в “кучі”. Відповідно до операції new, синтаксично допускаються такі способи її використання

1. delete var_name;

Приклад: float*r=new float [20];

delete r;

2. delete [expr] var_name

Приклад:

float*r=new float [20];

delete [20] r;

Відмітимо, що дія в першому та другому випадках анологічна. Звідси випливає, що другий спосіб використання не дасть можливості звільнити не всю пам’ять, виділену за допомогою операції new(в ранніх версіях С++). Виділивши пам’ять , наприклад, так:

float*r=new float [20];

можемо звільнити її будь-яким з наступних способів:

delete [200] r;delete [20] r; delete [10] r; delete [2] r; delete [ ] r; delete r;

1.10 Вказівник на void.

Вказiвнику на тип void можна присвоїти значення вказiвника на будь-який базовий тип.

Приклад: void* void_ptr;

int*int_ptr=0x256;

void_ptr=int_ptr;

int_ptr=void_ptr; //невiрно

Параметри типу void* найчастiше використовуються при написаннi програмних компонент , поведiнка яких не залежить вiд конкретних типів значень . Напишемо, наприклад функцію, що міняє місцями 2 змінні будь-яких типів *:

void swap (void* & item1,void* & item2)

{void* temp=item1;

item1=item2;

item2=temp;

}

main()

{int *i=new int, *j=new int;

*i=5;

*j=20;

swap (i,j);

print("*i=%d*j=%d\n",*i,*j);

float *y=new float;*x=new float;

*x=5.0;

*y=20.0;

swap (x,y);

printf("*x=%f *j=%f\n",*i,*j);

}

*Примітка. В деяких версіях компілятора С++(наприклад, 3.11) цей приклад не працює. Тоді необхідно явно вказувати перетворення типу до void*:

swap((void*) i, (void*) j );