Ich verwende normalerweise std::vector
und gerne durch const Referenz übergeben. Das heißt, wenn meine API an irgendeinem Punkt durch c-Code aufgerufen werden kann, kann die Verwendung von pass by const Pointer sinnvoll sein, obwohl Sie dann auch die Größe senden möchten. Wenn die Funktion mit oder std::vector
aufgerufen werden kann, können Sie einen Zeiger (und eine Größe) oder eine Reihe von Iteratoren (Anfang/Ende) senden.
Wenn wir über die Verwendung von std :: array sprechen, benötigt das Template-Argument die Größe des Arrays. Dies würde in einer normalen Funktion bedeuten, Sie eine feste Größe benötigen würden:
void myfunc(const std::array<int, 5>& mydata){...}
Wenn wir jedoch eine Templat-Funktion, Templating auf Größe zu tun, das ist kein Problem mehr.
template<unsigned int SZ>
void myfunc(const std::array<int, SZ>& mydata) {...}
Wenn wir sprechen über Stapel reserviert c-style-Arrays ... Gut C++ Stil ist zu std :: array/std :: vector c-style-Arrays bevorzugen. Ich würde empfehlen zu lesen C++ Coding Standard by Herb Sutter Kapitel 77 auf Seite 152 spricht über das Thema. Bei Verwendung von c-artigen Arrays ist das Senden des Mauszeigers und der Größe der Standardweg.
! Wird ein dynamisch zugewiesenes Array nicht als Parameter für den Verweis akzeptiert? Woher? Eine Referenz ist schließlich ein Alias. – quantum231
@ quantum231 Die dynamische Zuweisung eines Arrays gibt bereits einen Zeiger zurück, also nein. –
Es gibt keine automatische Zuweisung, aber es gibt ein Typenproblem. Beispiel: 'void f (int (& arg) [5]);' 'void g() {f (* neu int [1] [5]);}' –