In dieser Funktion ist arr ein Zeiger, und es gibt keine Möglichkeit, ihn wieder in ein Array umzuwandeln. Es ist dasselbe wie
%Vor% %Vor%Wenn angenommen wird, dass die Funktion einen Verweis auf Array zurückgibt, funktioniert dies immer noch nicht. Sie können einem Array nicht zuweisen. Im besten Fall könnte man das Ergebnis an eine "Referenz eines Arrays von X-Ints" binden (mit einem Typedef, weil die Syntax ansonsten sehr hässlich würde):
%Vor%Es ist jedoch völlig unklar, was der Code in Ihrer Frage erreichen soll. Alle Änderungen, die Sie am Array in Funktion vornehmen, sind für den Aufrufer sichtbar. Es gibt also keinen Grund zu versuchen, das Array zurückzugeben oder es dem ursprünglichen Array zuzuordnen.
Wenn Sie ein Array mit fester Größe haben möchten, das Sie einem Wert zuweisen und übergeben können (mit den kopierten Inhalten), gibt es std::tr1::array
(oder boost::array
). std::vector
ist auch eine Option, aber das ist ein dynamisches Array, also kein exaktes Äquivalent.
Wie andere schon sagten, gibt es bessere Optionen wie STL-Container und die interessanteste Frage ist, warum Sie das Array zu einer Funktion zurückgeben müssen, die es bereits im Umfang hat.
Das heißt, Sie können Arrays nicht als Wert übergeben oder zurückgeben und müssen vermeiden, dass das Array zu einem Zeiger abfällt (siehe zB hier ), entweder mit Hilfe von Zeigern oder Verweisen darauf:
%Vor%Wenn Sie die Größe nicht fest codieren möchten, können Sie Vorlagenfunktionen verwenden:
%Vor%Die Semantik der Übergabe und Rückgabe von Arrays kann ziemlich verwirrend sein. Verwenden Sie stattdessen einen std :: vector.
Folgendes funktioniert und scheint nicht unordentlich oder falsch zu verstehen!
%Vor%Ich denke, Ihre beste Wette besteht darin, sie als Zeiger auf ein Array zurückzugeben. Hier ist ein Beispiel:
%Vor%Wenn nicht notwendig, verwenden Sie es nicht. Sie können einfach eine Referenz eines Arrays übergeben, beispielsweise:
%Vor%wenn Sie Folgendes verwenden:
%Vor%Es wird einen Kopiervorgang des Containers geben, die Kosten sind teuer.
Zu Ihrer Information: NRVO kann die Kosten möglicherweise eliminieren