求解,关于复制构造函数的有关问题

求解,关于复制构造函数的问题。
我把代码都贴上,方便研究。

#include <iostream>
using namespace std;
class num 
{
public:
num(){n=1;cout<<"构造函数执行\n";}
num(int i){n=i;cout<<"带参数的构造函数执行\n";}
num(const num&s){n=s.n;cout<<"复制构造函数执行\n";}
~num(){cout<<"析构函数执行\n";}
const num equal(const num&r){n=r.get();return *this;}
int get()const{return n;}
void set(int x){n=x;}
void add(){++n;}
const num &operator++()
{
++n;


return *this;
}
const num operator++(int o)
{
num temp(*this);
++n;
return temp;
}
private:
int n;
};
int main()
{
num one(1),two(5);
num therr=two.equal(one);
num abc=one;
cout<<two.get()<<endl;



return 0;
}

const num equal(const num&r){n=r.get();return *this;} 这句会调用复制构造函数,因为返回对象。
num abc=one; 也会调用。
我的问题是num therr=two.equal(one); 为什么不调用复制构造函数??

------解决方案--------------------
应该是被返回值优化给优化掉了
equal返回值,内部调用一次拷贝构造,到外面又要调用一次拷贝构造,这种情况默认是被优化成一次拷贝构造的