Чому sizeof називається оператором часу компіляції?
Тому що, під час компіляції, компілятор обчислює розмір виразу та підміняє постійне значення часу компіляції.
Це насправді оператор не працює?
Ні. Ви навіть можете використовувати sizeofдля оцінки розміру виразів, які ви не можете законно виконати (тобто, це спричинило б невизначене поведінку), доки компілятор може з'ясувати, який тип виразу.
Крім того, навіть перед C ++ 11 constexprви можете використовувати sizeofвирази способами, якими ви не можете використовувати вирази часу виконання.
І якщо це дійсно оператор часу компіляції, як це допомагає у створенні портативного коду ...
Типи можуть відрізнятися за розмірами на різних платформах. Використання sizeofвиразів замість твердо кодованих припущень означає, що ваш код не зламається, коли ви збираєтеся на іншій платформі, а ваші типи змінюють розмір.