C++学习-编译器优化

#include<iostream>
using namespace std;
class Data
{

    public:
        Data()
        {
            cout<<"Data()"<<endl;
        }
        Data(const Data & d)
        {
            cout<<"Data(const Data &d)"<<endl;

        }
        Data& operator=(const Data& d)
        {
            cout<<"Data& operator=(const Data& d)"<<endl;
            return *this;
        }
        ~Data()
        {
            cout<<"~Data"<<endl;

        }
};

//传参
void Func1(Data d)
{

}
int main()
{
    Data d1;
    Func1(d1);
}

运行结果:

[zyc@localhost anonymize]$ ./a.out 

    Data()
    Data(const Data &d)
    ~Data
    ~Data


//传引用
void Func2(Data &d)
{
}
int main()
{
    Data d1;
    Func2(d1);
}

运行结果:

[zyc@localhost anonymize]$ ./a.out 

        Data()
        ~Data




//传值返回
Data Func3()
{
    Data d;
    return d;


}

int main()
{
    Func3(); 

    return 0;
}

运行结果:

[zyc@localhost anonymize]$ ./a.out 

    Data()
    Data(const Data& d)
    ~Data
    ~Data

匿名对象与普通对象对比‘

int main()
{

    Data d1;

    Data();
    return 0;
}

运行结果

[zyc@localhost anonymize]$ ./a.out 
Data()
Data()
~Data
~Data

匿名对象与普通自定义类型比较:

匿名对象生命周期短,调完构造,立马调用拷贝构造

匿名对象传参会被优化

int main()
{
    Func1(Data());
    return 0;
}
[zyc@localhost anonymize]$ ./a.out 
Data()
~Data



//传值返回
Data Func3()
{

    return Data();

}

int main()

{
    Func3();
    return 0;
}
[zyc@localhost anonymize]$ ./a.out 
Data()
~Data

匿名对象对返回值也会被优化

优化:传值优化
传参优化
接受返回值

猜你喜欢

转载自blog.csdn.net/zgege/article/details/81219547