读书人

直接初始化与赋值初始化解决方法

发布时间: 2012-03-11 18:15:39 作者: rapoo

直接初始化与赋值初始化
最近在看《c++ primer》看到初始化与赋值的区别。它说初始化是创建变量并给变量赋初值,而赋值是擦除对象的当前值并用新值代替。然后看了一些例子,感觉对两者的区别比较清楚了,但是看到后来关于直接初始化与赋值初始化又有点不明白了。
直接初始化还好说,关于类的赋值初始化它说会先调用类的默认构造函数,然后再调用类的复制构造函数。比如给一个string使用赋值初始化 string st="abc"; 那么st会先由string类的默认构造函数初始化为空,然后再由复制构造函数将其值初始化为"abc"。这样一来不就是上面说的擦除当前值(空)然后用新值("abc")代替吗?
类的赋值初始化和赋值有什么区别呢?怎样区分?

[解决办法]

C/C++ code
#include<iostream>#include<vector>#include<string>using  namespace std;class student{public:    student()    {        cout<<"默认构造函数"<<endl;    }    student(const  student&)    {        cout<<"复制构造函数"<<endl;           }    student  &operator=(const student &)    {        cout<<"赋值操作符"<<endl;        return *this;    }    ~student()    {        cout<<"析构函数"<<endl;    }};    //形参为student对象    void fun1(student obj)    {    }    //形参为student对象的引用    void fun2(student &obj)    {    }    student fun3()    {        student  obj;        return obj;    }int main(){     cout<<"student a"<<endl;    student a;    cout<<"fun1(a);"<<endl;    fun1(a);    cout<<"fun2(a);"<<endl;    fun2(a);    cout<<"a=fun3();"<<endl;    a=fun3();    cout<<"student  *p=new student;"<<endl;    student  *p=new student;    cout<<"vector<student> even(3);"<<endl;    vector<student> even(3);        cout<<"delete p"<<endl;    delete p;    cout<<"student b=a;"<<endl;    student b=a;    cout<<"student c;c=a; "<<endl;    student c;    c=a;    system("pause");    return 0;}
[解决办法]
“赋值初始化和赋值的区别是一个调用复制构造函数,一个调用赋值操作符”
这个,是区别导致的结果,而关键是为啥要有这个区别。

读书人网 >C++

热点推荐