Оператор
string temp(s);
равен прямой инициализации из temp
. Компилятор найдет наилучшую подходящую перегрузку конструктора, которая будет копирующим конструктором для string
. Это означает, что вы действительно копируете конструкцию temp
из s
, и это эквивалентно
string temp = s;
Это означает, что temp
будет копией s
.
Учитывая, что функция printAllPermutations
принимает аргумент s
по значению, вам на самом деле не нужна переменная temp
, вы можете работать непосредственно с s
, поскольку она, в свою очередь, будет копией строки вы использовали в вызове printAllPermutations
.
. При использовании temp
у вас изначально есть три копии строки: исходная строка в функции main
, используемая для вызова printAllPermutations
; Копия в s
; И копия в temp
.
На самом деле вам не нужен объект s
в функции main
, вы можете передать строку "AAB"
непосредственно в вызове функции:
printAllPermutations("AAB");