minimalny przykład:
#include <iostream>
using namespace std;
typedef __int64 int64;
class Int
{
public:
friend ostream& operator<< (ostream& os, const Int& a);
friend const Int& operator+ (int64 a, const Int& b);
Int(const Int& a): val(a.val) {}
Int(int64 a): val(a) {/*cout << "kontruktor ";*/}
private:
int64 val;
};
ostream& operator<< (ostream& os, const Int& a) { return os << a.val; }
const Int& operator+ (int64 a, const Int& b) { return Int(a+b.val); }
int main()
{
Int a = 1;
Int b = 1+a;
cout << b;
return 0;
}
output:
38578014732195064
po czymś takim, myślę sobie: "głupi błąd", więc dodałem prostego cout-a, w powyższym kodzie jest zakomentowany, po odkomentowaniu output:
kontruktor kontruktor 2
jak to wyjaśnić? gdzie jest ten błąd?