Dlaczego nikt nie używa krotek w C ++, ani w Boost Tuple Library, ani w bibliotece standardowej dla TR1? Przeczytałem dużo kodu C ++ i bardzo rzadko widzę użycie krotek, ale często widzę wiele miejsc, w których krotki rozwiązałyby wiele problemów (zwykle zwracając wiele wartości z funkcji).
Krotki pozwalają robić różne fajne rzeczy, takie jak ta:
tie(a,b) = make_tuple(b,a); //swap a and b
To z pewnością lepsze niż to:
temp=a;
a=b;
b=temp;
Oczywiście zawsze możesz to zrobić:
swap(a,b);
Ale co, jeśli chcesz obrócić trzy wartości? Możesz to zrobić za pomocą krotek:
tie(a,b,c) = make_tuple(b,c,a);
Krotki znacznie ułatwiają również zwracanie wielu zmiennych z funkcji, co jest prawdopodobnie znacznie częstszym przypadkiem niż zamiana wartości. Używanie odwołań do zwracania wartości z pewnością nie jest zbyt eleganckie.
Czy są jakieś duże wady krotki, o których nie myślę? Jeśli nie, dlaczego są rzadko używane? Czy są wolniejsze? A może po prostu ludzie nie są do nich przyzwyczajeni? Czy warto używać krotek?
a = a ^ b; b = a ^ b; a = a ^ b;