初始化与赋值的区别

来源:互联网 发布:淘宝衣服代理加盟 编辑:程序博客网 时间:2024/05/16 12:02

在C++中,利用=初始化和赋值咋一看很相似,其实背后的实现原理完全不同,本文尝试讲解其中一二,不至于在脑海中混淆两者的概念.

请看如下示例代码:

class Paper {public:  unsigned int width;  unsigned int height;public:  Paper() {    cout << "Paper constructor in_1" << endl;  }  Paper(const Paper &paper) {    cout << "Paper constructor in_2" << endl;    this->width = paper.width;    this->height = paper.height;  }  void operator=(Paper &paper) {    cout << "operator = in." << endl;    this->width = paper.width;    this->height = paper.height;  }};int main(){  Paper paper_1;  paper_1.width = 20;  paper_1.height = 10;  cout << "---------------------->" << endl;  Paper paper_2;  paper_2  = paper_1; // 赋值  cout << "width:" << paper_2.width << " height: " <<  paper_2.height << endl;  cout << "---------------------->" << endl;  Paper paper_3  = paper_1; // 初始化  cout << "width:" << paper_3.width << " height: " <<  paper_3.height << endl;  cout << "---------------------->" << endl;  Paper paper_4(paper_1); // 初始化  cout << "width:" << paper_4.width << " height: " <<  paper_4.height << endl;  cout << "---------------------->" << endl;  return 0;}

打印输出如下:

Paper constructor in_1---------------------->Paper constructor in_1operator = in.width:20 height: 10---------------------->Paper constructor in_2width:20 height: 10---------------------->Paper constructor in_2width:20 height: 10---------------------->

分析如下:

paper_2 = paper_1; // 赋值

该语句中paper_1paper_2已经存在,其中的=完成了赋值操作,调用的是我们重载的operator=函数.

Paper paper_3 = paper_1; // 初始化

该语句首先调用Paper::Paper()构造函数,构造出paper_1,紧接着调用Paper::Paper(const Paper &paper)构造paper_3,可见=完成的并不是一个赋值操作,而是一个初始化(构造)操作.

通过打印能看出来

Paper paper_3 = paper_1; // 初始化

Paper paper_4(paper_1); // 初始化

功能是一致的,均完成了初始化操作.

0 0
原创粉丝点击