Но что, если вы хотите повернуть три значения?
swap(a,b);
swap(b,c); // I knew those permutation theory lectures would come in handy.
ОК, поэтому при значениях 4 и т. Д. В конечном итоге n-кортеж становится меньше кода, чем n-1 перестановки. А при свопе по умолчанию выполняется 6 назначений вместо 4, которые вы получили бы, если бы вы внедрили шаблон с тремя циклами самостоятельно, хотя я надеюсь, что компилятор решит это для простых типов.
Вы можете придумать сценарии, в которых свопы громоздки или неуместны, например:
tie(a,b,c) = make_tuple(b*c,a*c,a*b);
немного неудобно распаковывать.
Суть в том, что существуют известные способы решения наиболее распространенных ситуаций, для которых кортежи хороши, и, следовательно, нет особой необходимости срочно заниматься кортежами. Если ничего другого, я не уверен, что:
tie(a,b,c) = make_tuple(b,c,a);
не делает 6 копий, что делает его совершенно неподходящим для некоторых типов (коллекции наиболее очевидны). Не стесняйтесь убеждать меня, что кортежи - хорошая идея для «больших» типов, говоря, что это не так: -)
Для возврата нескольких значений кортежи идеальны, если значения имеют несовместимые типы, но некоторым людям они не нравятся, если вызывающая сторона может получить их в неправильном порядке. Некоторым людям совсем не нравятся множественные возвращаемые значения, и они не хотят поощрять их использование, делая их проще. Некоторые люди просто предпочитают именованные структуры для входных и выходных параметров, и, вероятно, их нельзя убедить бейсбольной битой использовать кортежи. Нет учета вкуса.