Копирование структур

Структуры одинаковых типов можно копировать друг в друга целиком с помощью оператора присваивания '='. Продемонстрируем данное правило на примере структуры Result. Первый экземпляр r мы получаем из функции calculate.

void OnStart()
{
   ...
   Result r = calculate(s);
   r.print();
   // выведет в журнал:
   // 0.5 1 ok
   // 1.00000 2.00000 3.00000
   ...
   Result r2;
   r2 = r;
   r2.print();
   // выведет в журнал те же значения:
   // 0.5 1 ok
   // 1.00000 2.00000 3.00000
}

Затем дополнительно была создана переменная Result r2, и в неё продублировано содержимое переменной r, всех полей одновременно. В правильности операции можно убедиться по выводу в журнал с помощью метода print (строки приведены в комментариях).

Следует отметить, что определение двух типов структур с одинаковым набором полей не делает их типы одинаковыми. Присвоить одну из них другой целиком нельзя, а только поэлементно.

Чуть позже мы поговорим о наследовании структур, которое предоставляет расширенные возможности для копирования. Дело в том, что копирование работает не только между структурами одного и того же типа, но и между родственными типами. Однако там есть важные нюансы: мы рассмотрим их в разделе Компоновка и наследование структур.