Я не понимаю, почему вывод этой программы Второй метод вместо Первый метод ...
#include <iostream>
template <class T>
void assign(T& t1,T& t2){
std::cout << "First method"<< std::endl;
}
template <class T>
void assign(T& t1,const T& t2) {
std::cout << "Second method"<< std::endl;
}
class A
{
public:
A(int a):_a(a){};
private:
int _a;
friend A operator+(const A& l, const A& r);
};
A operator+(const A& l, const A& r) {
friend A operator+(const A& l, const A& r);return A(l._a+r._a);
}
int main ()
{
A a=1;
const A b=2;
assign(a,a+b);
}
Однако, когда я изменяю свою основную функцию на это:
int main ()
{
A a=1;
const A b=2;
A c=a+b;
assign(a,c);
}
Вывод Первый метод .
Есть идеи?