Sono stato sorpreso di scoprire che GCC consente alle funzioni di restituire gli array quando viene utilizzato il tipo di ritorno finale anziché normale. Come probabilmente saprai, gli array non possono essere copiati, quindi è abbastanza limitato, ma lascia che ti mostri un po 'cool example.GCC consente di restituire gli array dalla funzione - bug o funzionalità?
#include <iostream>
#include <typeinfo>
using namespace std;
auto func() -> int [5]
{
return {4, 56, 78, 4, 0};
}
int main()
{
cout << func()[2] << endl;
cout << typeid(func).name() << endl;
}
Si tratta di un bug del compilatore o di qualche nuova funzionalità?
È interessante notare che "typeid" restituisce "FA5_ivE" che è contrassegnato come "int (()) [5]
" e ciò significa esattamente ciò che si pensa che una funzione restituisca un array di 5 int.
EDIT: Ho provato delimita la matrice restituita in riferimento rvalue ma senza successo (serve la maggior parte delle forme possibili):
auto &&refArrayTemp{ func() };
sembra che questa estensione è piuttosto inutile.
immagino th all'array è un 'const const statico []' uno ... Se questo è il caso, il compilatore si sta comportando correttamente. –
@BasileStarynkevitch non è così; Posso scrivere 'func' prendendo i parametri' int' e sono posizionati nell'array restituito. – ecatmur