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