很多情况下,对于 如下的说明,很难接受
int a(10);
其实完全等价于int a=10;
所以下面的情况更加难以接受:
class A;//定义class A
应用:
A a;
A b(a);//其实完全等价于A b=a,调用的都是拷贝构造函数,在所有人的眼中如果不是,非常熟悉这样赋值的方式,还真是看做是赋值运算。
例子如下:
void Test(A a)
{
}
在这个函数中,通过值的传递,其实调用的是拷贝构造函数,而没有调用赋值运算符,或者默认的构造函数,
class T { public: T() { cout<<"T()"<<endl; } T(const T& t) { cout<<"call copy constructor"<<endl; } T operator =(T t) { cout<<"call assign constructor"<<endl; } ~T() { cout<<"~T()"<<endl; } private: }; void test(T t) { } 详细的调用如下: T *p=new T(); T c=*p; T cc; cc=*p; cout<<"**"<<endl; T bb(cc); cout<<"***"<<endl; test(*p); delete p;
时间: 2024-12-28 01:40:14