2017-02-10 3 views
0

Für eine generische Art und Weise die Größe der Elemente in einem Vektor zu finden, das ist gültig:Ist `sizeof (some_vector [0]) 'gültig?

std::vector<float> some_vector; 
int size = sizeof(some_vector[0]); 

Oder könnte dies zu Problemen führen, weil some_vector [0] leer sein könnte?

Ich denke, dass dies während der Kompilierungszeit sowieso ausgewertet, aber ist es nach dem Standard?

+0

Das ist völlig in Ordnung, so ist 'sizeof (* static_cast (0))'; – Nawaz

+4

Bedenken Sie, dass das, was von 'v [0]' zurückgegeben wird, nicht der gleiche Typ sein kann wie das 'T' in' std :: vector v; '. Betrachten Sie zum Beispiel den Proxy-Typ, der von 'vector ' zurückgegeben wird. – BoBTFish

Antwort

2

Der Operator sizeof wird mit nicht bewerteten Ausdrücken verwendet. Sie können diesen Ausdruck verwenden, um die Größe des Elements eines Vektors zu bestimmen.

Aus dem C++ Standard (5.3.3 Sizeof)

1 Der Operator sizeof ergibt die Anzahl von Bytes in dem Objekt Darstellung seines Operanden. Der Operand ist entweder ein Ausdruck , der ein nicht bewerteter Operand ist (Abschnitt 5), oder ein in Klammern gesetzter Typ-ID. Der Operator sizeof darf nicht auf einen Ausdruck mit Funktion oder unvollständigem Typ angewendet werden, auf einen Aufzählungstyp, dessen zugrunde liegender Typ nicht festgelegt ist, bevor alle seine Enumeratoren deklariert wurden, auf den Namen solcher Typen oder auf einen glvalue bezeichnet ein Bit-Feld. sizeof (char), sizeof (signed char) und sizeof (vorzeichenloses Zeichen) sind 1. Das Ergebnis von sizeof, das auf irgendeinen anderen Grundtyp (3.9.1) angewendet wird, ist implementierungsdefiniert. [Anmerkung: in insbesondere, sizeof (bool), sizeof (char16_t), sizeof (char32_t) und sizeof (wchar_t) sind implementation-de fi ned.75-Endnote] [Hinweis: Siehe 1.7 für die Definition von Byte und 3.9 für die Definition des Objekts Darstellung. -Ende]