函數(shù)的調(diào)用優(yōu)化

函數(shù)的調(diào)用優(yōu)化

創(chuàng)新互聯(lián)專注于成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設、網(wǎng)頁設計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡營銷中找到自己的駐足之地。尊重和關懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

    在類中有四大成員函數(shù),構造函數(shù),拷貝構造函數(shù),賦值函數(shù)和析構函數(shù),在類外進行實例化時,若調(diào)用函數(shù)的方法不當則會產(chǎn)生時間和空間的浪費。

    以下,將用幾個小栗子來說明函數(shù)的調(diào)用優(yōu)化的常見辦法

類:

class Test
{
public:
	Test(int d = 0)
		: _data(d)
	{
		cout << "Create Test Object:"<<this << endl;
	}
	Test(const Test&x)
		:_data(x._data)
	{
		cout << "Copy Create Object:" <<this<< endl;
	}
	Test&operator=(const Test&x)
	{
		cout << "Assign:"<<this << endl;
		if (this != &x)
		{
			_data = x._data;
		}
		return *this;
	}
	~Test()
	{
		cout << "Free Test Object:"<<this << endl;
	}
public:
	int GetData() const
	{
		return _data;
	}
private:
	int  _data;
};

方法

Test fun(Test x)
{
	int value = x.GetData();
	Test tmp(value);
	return tmp;
}
void main()
{
	Test t1(100);//構造
	Test t2;//拷貝構造
	t2 = fun(t1);
	/*
	1.fun函數(shù)的參數(shù)先做一份零時拷貝,調(diào)用構造函數(shù);
	2.用value拷貝構造tmp;
	3.返回tmp時再用tmp創(chuàng)建臨時變量,調(diào)用拷貝構造函數(shù);
	4.出這個函數(shù)域后,創(chuàng)建的臨時變量進行析構,即x和tmp;
	5.返回的值給t2賦值,調(diào)用賦值語句
	6.完成完賦值語句后,析構臨時的無名對象(tmp的)
	7.析構t2、t1。
	*/
	getchar();
}

以上是未優(yōu)化的方法,其占用空間,浪費時間

優(yōu)化1:

Test fun(Test x)
{
	int value = x.GetData();
	return Test(value);//創(chuàng)建無名臨時變量,創(chuàng)建出的變量無名字
	/*
		返回時一般都會拷貝一個臨時變量再返回,但這里編譯器進行了優(yōu)化
	直接進行構造了一個無名臨時變量(減少了一次拷貝構造函數(shù)的調(diào)用和析構)
	*/
}
void main()
{
	Test t1(100);
	Test t2;
	t2 = fun(t1);
	/*
	直接用返回的無名臨時變量對t2進行賦值
	*/
	getchar();

}

優(yōu)化2

Test fun(Test&x)
{
	/*
	fun函數(shù)中的參數(shù)是引用傳參,x不用再創(chuàng)建臨時對象,省去了拷貝構造函數(shù)的調(diào)用
	*/
	int value = x.GetData();
	return Test(value);
}

優(yōu)化3

int main()
{
	Test t1(100);
	Test t2=fun(t1);
	//初始化,只調(diào)用構造函數(shù)
	getchar();
}

 優(yōu)化后只調(diào)用兩次構造函數(shù),兩次析構函數(shù)

ps:錯誤優(yōu)化

Test &fun(Test&x)
{
	int value = x.GetData();
	return Test(value);
	//返回時不能返回無名臨時變量,由于這個是引用返回,一出函數(shù)域就被析構,其值不存在

}

     關于一個函數(shù)是否可以引用返回要看這個對象是否為局部對象,若受這個函數(shù)域影響,則不能進行引用返回

新聞名稱:函數(shù)的調(diào)用優(yōu)化
網(wǎng)站URL:http://www.muchs.cn/article20/ihepjo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站排名、電子商務、服務器托管、面包屑導航、品牌網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站