欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 对象拷贝时的编译器优化(C++)

对象拷贝时的编译器优化(C++)

2024/10/24 5:24:19 来源:https://blog.csdn.net/2301_80689220/article/details/140674916  浏览:    关键词:对象拷贝时的编译器优化(C++)

1. 了解编译器优化

1. 现代编译器会为了尽可能提高程序的效率,在不影响正确性的情况下会尽可能减少一些传参和        传参过程中可以省略的拷贝
2. 如何优化C++标准并没有严格规定,各个编译器会根据情况自行处理。当前主流的相对新一点        的编译器对于连续一个表达式步骤中的连续拷贝会进行合并优化,有些更新更"激进"的编译还        会进行跨行跨表达式的合并优化
 

 

#include<iostream>using namespace std;class A
{
public:A(int a = 0):_a1(a){cout << "A(int a)" << endl;}A(const A& aa):_a1(aa._a1){cout << "A(const A& aa)" << endl;}A& operator=(const A& aa){cout << "A& operator=(const A& aa)" << endl;if (this != &aa){_a1 = aa._a1;}return *this;}~A(){cout << "~A()" << endl;}private:int _a1 = 1;
};void f1(A aa)//传值调拷贝构造函数
{}
A f2()
{A aa;return aa;
}int main()
{// 传值传参 A aa1;f1(aa1);cout << endl;// 隐式类型,连续构造+拷⻉构造->优化为直接构造 f1(1);// ⼀个表达式中,连续构造+拷⻉构造->优化为⼀个构造 f1(A(2));//匿名对象cout << endl;cout << "***********************************************" << endl;// 传值返回 // 返回时⼀个表达式中,连续拷⻉构造+拷⻉构造->优化⼀个拷⻉构造 (vs2019) // ⼀些编译器会优化得更厉害,进⾏跨⾏合并优化,直接变为构造。(vs2022) f2();//传值传参返回会产生临时变量,出了作用域会销毁cout << endl;// 返回时⼀个表达式中,连续拷⻉构造+拷⻉构造->优化⼀个拷⻉构造 (vs2019)// ⼀些编译器会优化得更厉害,进⾏跨⾏合并优化,直接变为构造。(vs2022) A aa2 = f2();cout << endl;// ⼀个表达式中,连续拷⻉构造+赋值重载->⽆法优化 aa1 = f2();cout << endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com