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 обчислюється під час компіляції і вважається константою. Воно може бути використане скрізь, де потрібне константне значення, у тому числі як розмір вбудованого масиву. Наприклад: