下面有几个问题想不明白,希望学长 or 学姐可以帮忙解决,谢谢☺
1.递增运算符重载
#include<iostream>
using namespace std;
class myInteger{
	friend ostream& operator<<(ostream &cout, myInteger integer);
public:
	myInteger()
	{
		myint = 0;
	}
   //重载前置++
	myInteger& operator++()
	{
		myint ++;
		return *this;	
	 } 
    //重载后置++
	 myInteger operator++(int) 
	 {
		 myInteger temp = *this;
		 myint ++;
		 return  temp;
	  } 
private:
	int myint;
};
//重载左移运算符
ostream& operator<<(ostream &cout, myInteger integer)
{
	cout << integer.myint;
	return cout;
} 
//重载前置++ 测试
void test01()
{
    myInteger num1;
    cout << ++num1 << endl;
    cout << num1 << endl;
}
//重载后置++ 测试
void test02()
{
	myInteger num2;
	cout << num2++ << endl;
	cout << num2 << endl;
}
int main()
{
	test01();
        test02();
	return 0;
}
问题:在左移运算符<<重载的函数中,为什么形参一个传引用,一个不传引用?如果两个都传引用,就会出现重载后置++的测试案例中 43行代码(cout << num2 ++ << endl)报错:没有与这些操作数匹配的 "<<" 运算符	                                                                     但是如果两个参数都用引用,测试前置++运算符就没有问题         
ostream& operator<<(ostream &cout, myInteger integer)  //只有这样写形参才能保证前置后置测试都对
                                                                                               //为什么呢???
2.下面的代码在Dev C++ 和Visual  Studio 中运行结果不一样 ?(ಥ_ಥ)  ?
问题:下面的代码有关于拷贝(复制)构造函数调用时机的三种情况,为什么最后一种情况在Dev C++和VS中运行的情况不一样???
     
#include<iostream>
using namespace std;
class Person {
public:
	Person()
	{
		cout << "默认构造函数被调用" << endl;
	}
	Person(int n)
	{
		age = n;
		cout << "有参构造函数被调用" << endl;
	}
	Person(const Person& p)
	{
		age = p.age;
		cout << "拷贝构造函数被调用" << endl;
	}
	~Person()
	{
		cout << "析构函数被调用" << endl;
	}
	int age;
};
//1.使用一个创建完毕的对象来初始化一个新对象
void test01()
{
	Person p(10);
	Person p1(p);
	cout << "p1的年龄为:" << p1.age << endl;
}
//2.以值传递的方式给函数参数传值
void test02(Person p)
{
}
//3.值方式返回局部对象 
Person doWork()
{
	Person p1;
	cout << (int*)&p1 << endl;
	return p1;
}
void test03()
{
	Person p = doWork();
	cout << (int*)&p << endl;
}
int main()
{
	//test01();
	//Person p2;
	//test02(p2);
	test03();
	return 0;
}