Ich spreche nicht von std::array
oder irgendetwas, nur klassische Vanille C / C ++ - Arrays. Ich bin mir der verschiedenen Möglichkeiten bewusst, wie ARRAY_SIZE
/ _countof
implementiert werden könnte. Ich frage mich nur, ob es ihnen gelungen ist, einen Namen dafür zu standardisieren (unter std::
nehme ich an). Wenn nicht, gibt es einen Vorschlag dafür?
std :: excellence - die Größe von Arrays
Wenn Sie mit nativen Arrays arbeiten, können Sie std::extent
von <type_traits>
verwenden wird verwendet, um die Anzahl der Elemente in der N-ten Dimension eines Arrays (standardmäßig die erste) zu erhalten.
Ein wenig Indirektion (generische Lösung, nicht nur Arrays)
Es gibt keinen einzigen Namen, der als Ersatz für das, was Sie beschreiben, dienen kann, aber da C ++ 11 kann man std::begin
und std::end
um Iteratoren für eine geeignete Entität zu erhalten, und zusammen mit std::distance
haben Sie einen "hervorragenden" Weg die Größe von etwas zu bekommen, das die geeigneten Qualitäten hat.
Der Nachteil der obigen Lösung ist, dass keine der drei Funktionen constexpr in C ++ 11 ist, und selbst in C ++ 14 std::distance
ist immer noch nicht constexpr ( die anderen zwei sind).
Dies bedeutet, dass die Lösung nicht in Kontexten verwendet werden kann, die einen Konstantenausdruck erfordern.
Wenn Sie sicher sind, dass Sie mit einer Entität arbeiten, die RandomAccessIterators bereitstellt, können Sie die Problemumgehung umgehen, indem Sie std::end (e) - std::begin(e)
verwenden, wenn ein constant-expression erforderlich ist ( C ++ 14 ).
N4280 schlägt vor, dass wir std::size
zur Standardbibliothek hinzufügen, was genau das ist, wonach Sie suchen .
Wenn alles wie geplant läuft, werden wir es in C ++ 17 haben.