dlaczego konstruktor kopii jest wywołaniem, gdy przekazujemy obiekt jako argument według wartości do metody

Jestem nowy w programowaniu w C ++, gdy wykonuję niektóre programy w C ++ mam wątpliwości, dlaczego konstruktor kopiowania jest wywoływany, gdy przekazuję obiekt jako argument przez wartość do funkcji. proszę zobaczyć mój poniższy kod w tym, że przekazuję obiekt klasy jako argument przez wartość do funkcji display (), ale wywołuje konstruktor kopiowania, a następnie kontrola uderza w funkcję display (), ale rozumiem, dlaczego tak proszę o pomoc.

#include "stdafx.h"
#include <iostream>
using namespace std;

class ClassA
{
    private:
       int a, b;
    public:
       ClassA()
       {
           a = 10, b = 20;
       }
       ClassA(ClassA &obj)
       {
           cout << "copy constructor called" << endl;
           a = obj.a;
           b = obj.b;
       }
};
void display(ClassA obj)
{
   cout << "Hello World" << endl;
}
int main()
{
   ClassA obj;
   display(obj);
   return 0;
}

questionAnswers(3)

yourAnswerToTheQuestion