Why is sizeof called a compile-time operator?
Perché, in fase di compilazione, il compilatore calcola la dimensione dell'espressione e sostituisce il valore della costante in fase di compilazione.
Isn't it actually a run-time operator?
No.
Puoi anche usare sizeof
per valutare la dimensione delle espressioni che non puoi legalmente eseguire (cioè, ciò comporterebbe un comportamento indefinito), a patto che il compilatore possa capire cosa tipo dell'espressione è.
Inoltre, anche prima del C ++ 11% diconstexpr
, puoi usare sizeof
espressioni in modi in cui non puoi utilizzare le espressioni di runtime.
And if it is indeed a compile-time operator, how does it help in producing portable code ...
I tipi possono variare in dimensioni su piattaforme diverse. L'utilizzo di espressioni sizeof
invece di ipotesi codificate indica che il tuo codice non si interromperà quando compili su una piattaforma diversa e i tuoi tipi cambiano dimensione.