1、
mi = 306583632是个随即值
2、
3、
#include <stdio.h>
class Test {
int mi;
void init(int i)
{
mi = i;
}
public:
Test(int i) {
init(i);
}
Test() {
init(0);
}
void print() {
printf("mi = %d\n", mi);
}
};
int main()
{
Test t;
t.print();
Test(10).print();//直接调用构造函数 就会产生一个临时对象,作用于仅为该条语句,结束后释放
return 0;
}
4、
5、
6、
#include <stdio.h>
class Test
{
int mi;
public:
Test(int i)
{
printf("Test(int i) : %d\n", i);
mi = i;
}
Test(const Test& t)
{
printf("Test(const Test& t) : %d\n", t.mi);
mi = t.mi;
}
Test()
{
printf("Test()\n");
mi = 0;
}
int print()
{
printf("mi = %d\n", mi);
}
~Test()
{
printf("~Test()\n");
}
};
Test func()
{
return Test(20);
}
int main()
{
Test t = Test(10); // ==> Test t = 10; //优化后
// 1、生成临时对象,
//2、用临时对象初始化 t对象,
//3调用拷贝构造函数,但是最终并没有调用拷贝构造函数,原因是编译器进行优化减少临时对象的产生。
//这种方法会调用两次构造函数,影响效率
Test tt = func(); // ==> Test tt = Test(20); ==> Test tt = 20;
//编译器进行优化,没有产生临时对象,
t.print();
tt.print();
return 0;
}