此篇代码根本没有调用拷贝构造函数,拷贝构造函数只有在两种情况下会被调用:1、使用类去初始化一个类。
例如:对你的代码做一定修改。
con c1('a');
con c2(c1); //这里会调用拷贝构造。基本属于显示的调用了。
2、调用函数时函数返回一个类的变量。
例如重写你的代码
con show(con c3)
{
con c4('c');
return c4; //此时调用拷贝构造函数。程序内部调用,拷贝一个临时变量返回给调用处
}
两次调用show函数都会调用复制构造函数
因为show函数的参数是con类型,不是con引用
所以在函数压栈的时候会在栈内生成临时对象.
其实你对函数调用的过程还不是很理解。
void show(con c){cout<
是调用函数 show时调用了复制构造函数,
因为函数的实参实际上是生成的复本,所以会调用复制构造函数,
show 改成 引用形式的参数就不会调用了,这样效率会提高,省去了复制参数的过程
void show(const con &c){cout<
值传递对象。