回来类类型的函数是调用复制构造函数还是条用赋值

返回类类型的函数是调用复制构造函数还是条用赋值?
#include <iostream>

using namespace std;
class Hell
{
public:

    Hell(Hell & A)
    {

        cout<<"copy constructor"<<endl;
        this->a=2;

    }
    Hell()
    {
        a=0;
    }
Hell& operator=( const Hell & dd)
{
    cout<<"assignment"<<endl;
    a=dd.a+1;
    return *this;
    
}
Hell & operator=(Hell & dd)
{

    cout<<"Hello"<<endl;
    a=dd.a+1;
    return *this;
}
void print()
{
    cout<<a<<endl;
}
private:
    int a;

};
Hell print()
{

    Hell b;    
    return b;
}
int main()
{
    Hell temp;
    temp=print();
    temp.print();
    return 0;
}

函数返回类类型的时候是调用什么函数?如果是赋值调用函数,在倒数第三行temp=print()应该是两次赋值函数才对啊
c++

------解决方案--------------------
拷贝构造函数