"строка temp (s);" где "s" это строка - PullRequest
0 голосов
/ 29 апреля 2020
void printAllPermutations(string s) 
{ 

   // Sorting String 
   string temp(s); 
   sort(temp.begin(), temp.end()); 

   // Print first permutation 
   cout << temp << endl; 

   // Finding the total permutations 
   int total = calculateTotal(temp, temp.length()); 
   for (int i = 1; i < total; i++)  
   { 
       nextPermutation(temp); 
   } 
} 

int main()  
{ 
   string s = "AAB"; 
   printAllPermutations(s); 
} 

string 's' является формальным параметром функции printAllPermutations (). Я сомневаюсь, что: как это "string temp (s);" записывается, когда 's' также является строкой, а 'temp' является новой строкой, которую необходимо создать?

1 Ответ

3 голосов
/ 29 апреля 2020

Оператор

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");
...