Почему sizeof называется оператором времени компиляции?
Потому что во время компиляции компилятор вычисляет размер выражения и подставляет это значение постоянной времени компиляции.
Разве это не оператор во время выполнения?
Нет. Вы можете даже использовать, sizeofчтобы оценить размер выражений, которые вы не можете выполнить на законных основаниях (т. Е. Это может привести к неопределенному поведению), при условии, что компилятор может выяснить, каков тип выражения.
Кроме того, даже до C ++ 11 constexprвы можете использовать sizeofвыражения так, как вы не можете использовать выражения во время выполнения.
И если это действительно оператор времени компиляции, как он помогает в создании переносимого кода ...
Типы могут различаться по размеру на разных платформах. Использование sizeofвыражений вместо жестко заданных допущений означает, что ваш код не сломается, когда вы компилируете на другой платформе и ваши типы изменят размер.