构造拷贝构造的N种调用情况
来源:互联网 发布:幸运28网站源码2016 编辑:程序博客网 时间:2024/06/05 03:12
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;class Date{public: Date() { cout<<"Date()"<<endl; } Date(const Date& d) { cout<<"Date(const Date& d)"<<endl; } Date& operator =(const Date& d) { cout<<"Date& operator =(const Date& d)"<<endl; return *this; } ~Date() { cout<<"~Date()"<<endl; }};
参数传值和传引用
void fun1(Date d){ ;}void fun2(Date& d){ ;}
返回值用传值和传引用
Date fun3(){ Date d; return d;}Date& fun4(){ Date d; return d;}
临时返回值传值和传引用
Date fun5(){ return Date();}Date& fun6(){ return Date();}
测试代码
int main(){ Date d1; fun1(d1); fun2(d1); Date d3 = fun3(); Date d4 = fun4(); Date d5; d5 = fun5(); //Date d5 = fun5(); Date d6; d6 = fun6(); //Date d6 = fun6(); return 0;}
通过调试以上代码可得:
- 当拷贝构造的临时变量再调用拷贝构造函数和构造对象时,只调用一次拷贝构造函数。
- 当临时变量作返回值再拷贝构造新对象时,只调用一次构造函数
结论:在一个表达式中系统会优化。
#include <iostream>using namespace std;class AA{public: AA() { cout<<"AA()"<<endl; } AA(const AA& d) { cout<<"AA(const AA& d)"<<endl; } AA& operator =(const AA& d) { cout<<"AA& operator =(const AA& d)"<<endl; return *this; } ~AA() { cout<<"~AA()"<<endl; }};AA f(AA a) { return a ; }void Test1 () { AA a1 ; a1 = f(a1); }void Test2 () { AA a1 ; AA a2 = f(a1); }void Test3 () { AA a1 ; AA a2 = f(f(a1)); }int main(){ Test1(); Test2(); Test3(); return 0;}
Test1中调用了 2 次AA的拷贝构造函数, 1 次AA的赋值运算符函数的重载。
Test2中调用了 2 次AA的拷贝构造函数, 0 次AA的赋值运算符函数的重载。
Test3中调用了 3 次AA的拷贝构造函数, 0 次AA的赋值运算符函数的重载。
(f(a1)的返回值作为f()的参数只调用一次拷贝构造函数,函数f(f(a1))的返回值拷贝构造出临时变量和创建对象a2只调用一次拷贝构造即可完成)
阅读全文
0 0
- 构造拷贝构造的N种调用情况
- 讨论构造、拷贝构造的N种调用情况
- 讨论构造拷贝构造函数的N种调用情况
- 【c++】构造拷贝构造的N种调用情况问题
- 讨论构造拷贝构造的N种调用情况问题
- 构造,拷贝构造的N种调用情况
- C++构造拷贝中拷贝的N种调用情况
- 构造、拷贝构造的N种情况
- 构造函数拷贝赋值函数的N种调用情况
- 构造拷贝构造的N中调用情况的问题
- 【C++】构造拷贝构造的 N 中调用情况
- 构造&拷贝构造的N中调用情况
- 拷贝构造的N种情况
- 构造和拷贝构造的N种调用情况的问题
- 拷贝构造中的N中调用情况
- C++传参构造的优化和讨论构造拷贝构造N中调用情况
- 讨论构造拷贝构造的N中调用情况的问题
- 【C++】构造拷贝构造的N中调用情况的问题
- 隐式Intent的用法
- 【简记】Java Web 内幕——CDN简介
- Python 算法基础 排序实现
- 【经验随笔】MYSQL表加锁升级导致数据库访问失败
- The MRC database dictionary之MEANC库 (Mean Colorado Meaningfulness 意义性)
- 构造拷贝构造的N种调用情况
- 编程题——二叉树和的路径
- HTML2
- C语言字符串相关操作总结
- OpenCV获取摄像头数据并显示在窗口里 Python实现
- 贪心算法 POJ3253 Fence Repair
- The MRC database dictionary之MRC_words
- SQLite与Android的数据交互
- Quartz 入门(1)