Der Compiler kann sogar das
memcpy durch eine entsprechend lange Folge von
mov-Befehlen ersetzen, wenn du Intrinsics aktiviert hast.
sizeof muss zur Kompilierzeit ausgewertet werden – beispielsweise ist dies hier möglich:
Code: Alles auswählen
template <size_t ItsSize> struct Buffer {
char Bytes[ItsSize];
};
Buffer<sizeof(int)> SomeBuffer;
// Und sogar
Buffer<sizeof(Buffer<sizeof(int)>)> OtherBuffer;
Es geht aber noch weiter: Da
sizeof die Größe fast
jedes Ausdrucks ermitteln kann, ohne ihn zur Laufzeit auszuführen, kann man Dummy-Funktionen deklarieren und in
sizeof benutzen, die für bestimmte Typen und für den ganzen Rest („
...“) unterschiedlich große Rückgabewerte haben. Da sich dann durch einen Aufruf in einem
sizeof ohne Laufzeitwirkung feststellen lässt, ob ein Typ von einem anderen erbt oder in ihn konvertierbar ist, ist das ein riesiges Hilfsmittel in der Metaprogrammierung.
Ab C++0x bekommt
sizeof außerdem
alignof zur Seite gestellt, mit dem sich dann neben der Größe eines Ausdrucks mit gleicher Syntax auch seine Ausrichtung im Speicher abfragen lässt.
Gruß, Ky