关于C++中的copy constructor,该怎么处理

关于C++中的copy constructor
若有如下定义:
class base{
public:
  base(base& obj){
  //…
  }
  base(const base&){
  //…
  }
//…
};
函数声明:void foo(base x0);
下面这样调用:
base xx;//定义一个class base object
foo(xx);
请问:编译器会不会产生临时对象?
我在深度探索C++对象看到是这样的:
编译器产生出来的暂时对象(C++伪码):
base temp;
temp.base::base(xx);
foo(temp);
此时已经调用了一次copy constructor(我在调试的时候并没有看到copy constructor调用),但是在传递参数的时候,因为是传值,不是引用,这样会不会再一次调用copy constructor??再然后为什么会以bitwise方式拷贝到x0这个局部实体中???
若函数声明为这样:
void foo(base& x0);
那如下两步是否还会执行?
base temp;
temp.base::base(xx);

我调试过了,若这样void foo(base& x0);则没有调用copy constructor
  若void foo(base x0);则只调用了一次copy constructor
可我觉得按以下方式应该是两次阿?为什么呢?


------解决方案--------------------
我调试过了,若这样void foo(base& x0);则没有调用copy constructor
若void foo(base x0);则只调用了一次copy constructor
=============
楼主上面的结论是正确的!

可我觉得按以下方式应该是两次阿?为什么呢?
=============
那个只是伪码,告诉你大致是那么回事情,而非真正的代码