学习复制构造函数,遇到了一点小问题


Point::Point(Point& p) {
    x = p.x;
    y = p.y;
    cout << "Calling the copy constructor" << endl;
}

复制构造函数Point::Point(Point& p),加&有什么意义?


void fun1(Point p)//加一个取&符号,有什么不同。
{
    cout << p.getX() << endl;
    cout << p.getY() << endl;
}

void fun1(Point p)运行得到的结果是

img


void fun1(Point &p)运行得到的结果是

img


可以看到少了一行Calling the copy constructor,这两种方式的原理肯定有所不同,但我不明白哪里不同?有没有同学帮忙解答一下

&传值表示引用 用地址传值 ,而不用&则是形参会拷贝一个新的变量 这个时候调用了复制构造函数。也就是说函数传值的时候会产生一个中间变量