Byłem zaskoczony, gdy dowiedziałem się, że GCC umożliwia funkcjom zwracanie tablic, gdy używany jest zwracający typ powrotu zamiast zwykłego. Jak zapewne wiesz, tablic nie można kopiować, więc jest to dość ograniczone, ale pozwól, że pokażę ci kilka fajnych example.GCC pozwala na zwrócenie tablic z funkcji - błędu lub funkcji?
#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;
}
Czy jest to błąd kompilatora lub jakąś nową funkcję?
Co ciekawe "typid" zwraca "FA5_ivE", który jest demangled jako "int (()) [5]
", a to oznacza dokładnie to, co myślisz funkcja zwracająca tablicę 5 int.
EDIT: Próbowałem ograniczająca zwracana tablica do odniesienia rvalue ale bez powodzenia (używany przez większość możliwych formach):
auto &&refArrayTemp{ func() };
Wydaje się, że rozszerzenie jest raczej bezużyteczne.
Chyba th w tablicy jest 'static const int []' one ... Jeśli tak jest, kompilator zachowuje się poprawnie. –
@BasileStarynkevitch nie tak; Mogę napisać 'func' pobierający parametry' int' i są one umieszczane w zwróconej tablicy. – ecatmur