用临时对象 赋值、初始化对象的过程

代码如下:

#ifndef _Hello
#define _Hello
#include<iostream>
using namespace std;
class LUO {
private:
	int x;
	int y;
public:
	LUO() {
		cout << "默认构造函数" << endl;
	}
	LUO(int a, int b) :
		x(a), y(b) {
		cout << "普通带参数构造函数" << endl;
	}
	LUO(const LUO& a) {
		cout << "拷贝构造函数" << endl;
	}
	~LUO() {
		cout << "析构函数" << endl;
	}
	inline void operator =(const LUO& a) {
		this->x = a.x;
		this->y = a.y;
		cout << "拷贝复制函数" << endl;
	}
	inline void print() {
		cout << x << endl;
		cout << y << endl;
	}
};
#endif // !_Hello




#include"pch.h"
#include"try.h"
#include<iostream>
using namespace std;
int main() {
	LUO a;                 //像这种情况编译器就没有进行优化
    a=LUO(2, 2);            
	                      
	LUO e = LUO(3,3);     /*有点明白了,这样好像是,降临时对象作为参数,然后LUO e调用了带参构造函数,编译器给优化了,
						   编译器直接就没有执行LUO(3,3)的构造过程*/
	e.print();
	return 0;
}

结果如下:

不管用临时对象赋值还是初始化,参数里面都要用const,编译器将临时对象看做常量对待。

我们发现当用临时对象对对象初始化时,编译器对其进行了简化,直接将临时对象中的参数作为对象的参数,执行了带参数的构造函数。省去了,1.临时对象带参数构造函数    2.对象拷贝构造函数    3.临时对象析构函数    这三步的过程。

所以呢,以后尽量用第二种方式,也就是临时对象初始化对象。对于c++这种追求效率的语言来说,一点点细节就能决定。

我用的时vs2017,不知道其他编译器是不是也做这种优化。感兴趣的道友们可以去尝试尝试。

        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值