C++中临时量和对象的生存周期

本文探讨了C++中临时对象的生成、生存周期及其优化情况。通过示例代码解析了不同情况下,临时对象如何在构造、赋值、返回值等方面产生和消失,强调了编译器的优化策略在避免临时对象生成上的应用。
摘要由CSDN通过智能技术生成

          有时候在求表达式求值期间,编译器必须创建临时对象。像其他任何对象一样,临时对象也需要存储空间,并且必须能够构造和销毁。

临时量的生成:

        内置类型 ------>相当于常量(在C++中,常量必须初始化,指针类型都是内置类型)

        自定义内型----->相当于变量

       .隐式生成临时量:相当于一个常量(const类型)不能用普通的引用来引用。例如赋值运算符重载函数的形参

        显示生成临时对象:相当于生成了一个变量,可以用普通的引用来引用

  返回类型:

         返回值大于0小于等于4字节:使用一个寄存器带回 。如:eax寄存器

         返回值大于4小于等于8字节:使用两个寄存器带回.。如:eax,ebx寄存器

          返回值大于8个字节:            临时量带出

          类类型不管是几个字节都由临时对象带出返回值,临时对象在内存中。

实参传递形参:

         实参传递形参的过程就是初始化的过程,要调用拷贝构造

返回对象:

        接收一个返回对象的返回值时,在定义的时候直接接收返回值,是初始化的过程并非赋值

对象的生存周期

          优化:如果(显示或隐式)生成一个临时对象是为了生成新的对象,那么就会以生成临时对象的方式来生成新的对象(不会产生临时对象)。

          无优化:如果(显示或隐式)生成一个临时对象是为了给已经生成的对象赋值,那么就会有临时对象的产生。

#include<iostream>
class Test
{
public:
	Test(int a, int b)
	{
		std::cout << this << " :Test::Test(int,int)" << std::endl;
		ma = a;
		mb = b;
	}
	Test(int a)
	{
		std::cout << this << " :Test::Test(int)" << std::endl;
		ma = a;
		mb = 0;
	}
	Test()
	{
		std::cout << this << " :Test::Test()" << std::endl;
		ma = mb = 0;
	}
	Test(const Test& rhs)
	{
		std::cout << this << " :Test::Test(const Test&)" << std::endl;
		ma = rhs.ma;
		mb = rhs.mb;
	}
	Test& operator=(const Test& rhs)
	{
		std::cout << this << " :Test::operator=(const Test&)" << std::endl;
		if (this != &rhs)
		{
			ma = rhs.ma;
			mb = rhs.mb;
		}
		return *this;
	}
	~Te
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值