Почему кажется, что никто не использует кортежи в 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;