4.8. Оператор sizeof

4.8. Оператор sizeof

Оператор sizeof повертає розмір у байтах об'єкта або типу даних. Синтаксис його такий:

sizeof (type name);

Результат має спеціальний тип size_t, який визначений як typedef в заголовному файлі cstddef. Ось приклад використання обох форм оператора sizeof:

// sizeof повертає розмір всього масиву

size_t array_size = sizeof ia;

// sizeof повертає розмір типу int

size_t element_size = array_size / sizeof(int);

Застосування sizeof масиву дає кількість байтів, що займаються масивом, а не кількість його елементів і не розмір в байтах кожного з них. Так, наприклад, в системах, де int зберігається в 4 байтах, значенням array_size буде 12. Застосування sizeof до покажчика дає розмір самого покажчика, а не об'єкта, на який він вказує:

int * pi = new int [3];

size_t pointer_size = sizeof (pi);

Тут значенням pointer_size буде пам'ять під покажчик у байтах (4 у 32-бітових системах), а не масиву ia.

Ось приклад програми, що використовує оператор sizeof:

ia = sizeof(ia); // правильно

ia = sizeof ia; // правильно

// ia = sizeof int; // помилка

ia = sizeof(int); // правильно

int * pi = new int [12];

cout "pi:" sizeof(pi)

// sizeof рядка не залежить від

// її реальної довжини

string stl("foobar");

string st2("a mighty oak");

cout "st1:" sizeof(st1)

" st2: " sizeof( st2 )

cout "short:" sizeof(short) endl;

cout "shorf" : " sizeof(short*) endl;

cout "short:" sizeof(short) endl;

cout "short[3] : " sizeof(short[3]) endl;

Результатом роботи програми буде:

st1: 12 st2: 12 ps: 4 * ps: 12

Гарантується, що у будь-якій реалізації З++ розмір типу char дорівнює 1.

size_t char_size = sizeof(char);

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