代码如下:
#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,不知道其他编译器是不是也做这种优化。感兴趣的道友们可以去尝试尝试。