91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

函數的調用優化

發布時間:2020-04-10 23:48:56 來源:網絡 閱讀:586 作者:Sekai_Z 欄目:編程語言

函數的調用優化函數的調用優化

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

    以下,將用幾個小栗子來說明函數的調用優化的常見辦法

類:

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函數的參數先做一份零時拷貝,調用構造函數;
	2.用value拷貝構造tmp;
	3.返回tmp時再用tmp創建臨時變量,調用拷貝構造函數;
	4.出這個函數域后,創建的臨時變量進行析構,即x和tmp;
	5.返回的值給t2賦值,調用賦值語句
	6.完成完賦值語句后,析構臨時的無名對象(tmp的)
	7.析構t2、t1。
	*/
	getchar();
}

以上是未優化的方法,其占用空間,浪費時間

優化1:

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

}

優化2

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

優化3

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

 優化后只調用兩次構造函數,兩次析構函數


函數的調用優化ps:錯誤優化

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

}

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣城市| 和龙市| 昭平县| 广元市| 班戈县| 门源| 舟曲县| 五峰| 揭阳市| 铜梁县| 宁化县| 保德县| 雷波县| 莱芜市| 鄂托克前旗| 富蕴县| 浠水县| 连山| 赣榆县| 石门县| 九龙城区| 南安市| 绍兴县| 宾阳县| 清远市| 华宁县| 乃东县| 从江县| 香格里拉县| 霍林郭勒市| 赤壁市| 平罗县| 惠州市| 罗城| 丹江口市| 荣昌县| 门源| 平和县| 蒙城县| 阳原县| 新河县|