Wiem, że sizeof
jest obliczaniem czasu kompilacji, ale wydaje mi się to dziwne: Kompilator może przyjmować nazwę typu lub wyrażenie (z którego dedukuje typ). Ale jak rozpoznać typ w klasie? Wydaje się, że jedynym sposobem jest przekazanie wyrażenia, które wydaje się dość niezgrabne.Dlaczego sizeof nie przetwarza elementów konstrukcyjnych?
struct X { int x; };
int main() {
// return sizeof(X::x); // doesn't work
return sizeof(X()::x); // works, and requires X to be default-constructible
}
Wsparcie dla 'sizeof (X :: x)' jest w C++ 0x (por http://www.open -std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html). –
@James +1 przy Twoim komentarzu. Moja odpowiedź (usunięta) powinna być właściwie komentarzem, ponieważ Tom nie wspomniał o C++ 0x. Może on tego chce w C++ 98 :) – AraK
Tak, moje pytanie dotyczy C++ 98. Jednak nawet jeśli buduję z '-std = C++ 0x', to nie działa (GCC 4.3.2). Czy są jakieś implementacje kompilatorów, które jeszcze ją obsługują? – Tom