Чому, схоже, ніхто не використовує кортежі в C ++, ні бібліотеку Boost Tuple, ні стандартну бібліотеку для TR1? Я прочитав багато C ++-коду, і дуже рідко я бачу використання кортежів, але я часто бачу багато місць, де кортежі вирішують багато проблем (як правило, повертають декілька значень з функцій).
Кортежі дозволяють робити всілякі класні речі, як це:
tie(a,b) = make_tuple(b,a); //swap a and b
Це, звичайно, краще, ніж це:
temp=a;
a=b;
b=temp;
Звичайно, ви завжди могли це зробити:
swap(a,b);
Але що робити, якщо ви хочете повернути три значення? Зробити це можна за допомогою кортежів:
tie(a,b,c) = make_tuple(b,c,a);
Кортежі також значно полегшують повернення декількох змінних з функції, що, ймовірно, є набагато більш поширеним випадком, ніж значення підміни. Використання посилань для повернення значень, звичайно, не дуже елегантне.
Чи є якісь недоліки кортежів, про які я не думаю? Якщо ні, то чому їх рідко використовують? Вони повільніші? Або просто люди не звикли до них? Чи корисно використовувати кортежі?
a = a ^ b; b = a ^ b; a = a ^ b;