欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

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

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

    以下,將用幾個(gè)小栗子來說明函數(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);//構(gòu)造
	Test t2;//拷貝構(gòu)造
	t2 = fun(t1);
	/*
	1.fun函數(shù)的參數(shù)先做一份零時(shí)拷貝,調(diào)用構(gòu)造函數(shù);
	2.用value拷貝構(gòu)造tmp;
	3.返回tmp時(shí)再用tmp創(chuàng)建臨時(shí)變量,調(diào)用拷貝構(gòu)造函數(shù);
	4.出這個(gè)函數(shù)域后,創(chuàng)建的臨時(shí)變量進(jìn)行析構(gòu),即x和tmp;
	5.返回的值給t2賦值,調(diào)用賦值語句
	6.完成完賦值語句后,析構(gòu)臨時(shí)的無名對(duì)象(tmp的)
	7.析構(gòu)t2、t1。
	*/
	getchar();
}

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

優(yōu)化1:

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

}

優(yōu)化2

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

優(yōu)化3

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

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

ps:錯(cuò)誤優(yōu)化

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

}

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

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

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

廣告

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

成都做網(wǎng)站