Hoe werkt het doorgeven van een statisch toegewezen array door middel van referentie?
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
Heeft (&myArray)[100]
enige betekenis of is het slechts een syntaxis om een array als referentie door te geven?
Ik begrijp hier geen aparte haakjes gevolgd door grote haakjes. Bedankt.
Antwoord 1, autoriteit 100%
Het is een syntaxis voor arrayverwijzingen – je moet (&array)
gebruiken om de compiler duidelijk te maken dat je een verwijzing naar een array wilt, in plaats van de (ongeldige) array van verwijzingen int & array[100];
.
EDIT: enige verduidelijking.
void foo(int * x);
void foo(int x[100]);
void foo(int x[]);
Deze drie zijn verschillende manieren om dezelfde functie te declareren. Ze worden allemaal behandeld als het nemen van een int *
parameter, je kunt er elke grootte array aan doorgeven.
void foo(int (&x)[100]);
Dit accepteert alleen arrays van 100 gehele getallen. Je kunt sizeof
veilig gebruiken op x
void foo(int & x[100]); // error
Dit wordt geparseerd als een “array van referenties” – wat niet legaal is.
Antwoord 2, autoriteit 23%
Het is gewoon de vereiste syntaxis:
void Func(int (&myArray)[100])
^ Geef array van 100 int
door als referentie, de naam van de parameter is myArray
;
void Func(int* myArray)
^ Geef een array door. Array vervalt tot een aanwijzer. Zo verlies je maatinformatie.
void Func(int (*myFunc)(double))
^ Geef een functiewijzer door. De functie retourneert een int
en neemt een double
. De parameternaam is myFunc
.
Antwoord 3, autoriteit 12%
Het is een syntaxis. In de functie zijn argumenten int (&myArray)[100]
haakjes nodig die de &myArray
omsluiten. als u ze niet gebruikt, geeft u een array of references
door en dat komt omdat de subscript operator []
een hogere prioriteit heeft dan de & operator
.
Bijvoorbeeld int &myArray[100] // array of references
Dus, door type construction ()
te gebruiken, vertel je de compiler dat je een verwijzing naar een array van 100 gehele getallen wilt.
Bijvoorbeeld int (&myArray)[100] // reference of an array of 100 ints
Antwoord 4, autoriteit 3%
Het volgende creëert een generieke functie, waarbij een array van elke grootte en van elk type als referentie wordt gebruikt:
template<typename T, std::size_t S>
void my_func(T (&arr)[S]) {
// do stuff
}
Antwoord 5, autoriteit 2%
Arrays worden standaard doorgegeven door pointers. Je kunt proberen een array binnen een functieaanroep te wijzigen voor een beter begrip.