拷贝对象时的一些编译器优化

在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还 是非常有用的。

class A
{
public:
 A(int a = 0)
 :_a(a)
 {
 cout << "A(int a)" << endl;
 }
 A(const A& aa)
 :_a(aa._a)
 {
 cout << "A(const A& aa)" << endl;
 }
    A& operator=(const A& aa)
 {
 cout << "A& operator=(const A& aa)" << endl;
 if (this != &aa)
 {
 _a = aa._a;
 }
 return *this;
 }
 ~A()
 {
 cout << "~A()" << endl;
 }
private:
 int _a;
};
void f1(A aa)
{}
A f2()
{
 A aa;
 return aa;
}
int main()
{
 // 传值传参
 A aa1;
 f1(aa1);
 cout << endl;
 // 传值返回
 f2();
 cout << endl;
 // 隐式类型,连续构造+拷贝构造->优化为直接构造
 f1(1);
 // 一个表达式中,连续构造+拷贝构造->优化为一个构造
 f1(A(2));
 cout << endl;
 // 一个表达式中,连续拷贝构造+拷贝构造->优化一个拷贝构造
 A aa2 = f2();
 cout << endl;
 // 一个表达式中,连续拷贝构造+赋值重载->无法优化
 aa1 = f2();
 cout << endl;
 return 0;
}
void func1(A aa)
{

}

void func2(const A& aa)
{

}

int main()
{
	A aa1 = 1; // 构造+拷贝构造 -》 优化为直接构造
	func1(aa1); // 无优化
	func1(2); // 构造+拷贝构造 -》 优化为直接构造
	func1(A(3)); // 构造+拷贝构造 -》 优化为直接构造

	cout << "----------------------------------" << endl;

	func2(aa1);  // 无优化
	func2(2);    // 无优化
	func2(A(3)); // 无优化


	return 0;
}

A func3()
{
	A aa;
	return aa; 
}

A func4()
{
	return A();
}

优化看编译器,一般g++都是这样了,都是常规优化了。
image-20240327044331260.png

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 06:28:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 06:28:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 06:28:02       87 阅读
  4. Python语言-面向对象

    2024-03-30 06:28:02       96 阅读

热门阅读

  1. 准备Python环境学习OpenCV的使用

    2024-03-30 06:28:02       44 阅读
  2. Springboot之RESTful风格

    2024-03-30 06:28:02       41 阅读
  3. 华为mate60rs非凡大师和华为Mate 60 Pro 参数对比

    2024-03-30 06:28:02       52 阅读
  4. Spring和Spring Boot的区别

    2024-03-30 06:28:02       38 阅读
  5. RuoYi-Vue-Plus (LoginHelper)

    2024-03-30 06:28:02       48 阅读
  6. vant Circle 环形进度条写一个倒计时组件

    2024-03-30 06:28:02       39 阅读
  7. 聊聊websocket opcode中的text / binary模式

    2024-03-30 06:28:02       50 阅读
  8. SpringMVC源码分析(八)--参数解析器

    2024-03-30 06:28:02       44 阅读
  9. JVM调优

    JVM调优

    2024-03-30 06:28:02      31 阅读