成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++11——“=default“和“=delete“函數(shù)特性-創(chuàng)新互聯(lián)

c++的類有四種特殊成員函數(shù):

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供扎賚諾爾網(wǎng)站建設(shè)、扎賚諾爾做網(wǎng)站、扎賚諾爾網(wǎng)站設(shè)計(jì)、扎賚諾爾網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、扎賚諾爾企業(yè)網(wǎng)站模板建站服務(wù),十載扎賚諾爾做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
  • 默認(rèn)構(gòu)造函數(shù)
  • 析構(gòu)函數(shù)
  • 拷貝構(gòu)造函數(shù)
  • 拷貝賦值運(yùn)算符

? 這些類的特殊成員函數(shù)負(fù)責(zé)創(chuàng)建、初始化、銷毀或者拷貝類的對(duì)象。
? 如果程序員沒有顯示的為類定義某個(gè)特殊成員函數(shù),而又需要用到該特殊成員函數(shù)時(shí),編譯器會(huì)隱式地為這個(gè)類生成一個(gè)默認(rèn)的特殊成員函數(shù);
? 而如果程序員顯示的定義了某個(gè)特殊成員函數(shù),編譯器將不會(huì)自動(dòng)為你生成默認(rèn)的構(gòu)造函數(shù)了,如果還想用默認(rèn)構(gòu)造函數(shù),就需要自己手寫,如果變量很多的話這將會(huì)很麻煩。

? c++11標(biāo)準(zhǔn)因此引入了新特性:default函數(shù)。程序員只需在函數(shù)聲明后加上”=default;”,就可將該函數(shù)聲明為defaulted函數(shù),編譯器將為顯式聲明的defaulted函數(shù)自動(dòng)生成函數(shù)體。

? defaulted函數(shù)特性僅適用于類的特殊成員函數(shù),且該特殊成員函數(shù)沒有默認(rèn)參數(shù)。
? defaulted函數(shù)既可以在類體里(inline)定義,也可以在類體外(out-of-line)定義。

default的用處

來看一個(gè)簡(jiǎn)單的例子:

例子來源

class Student
{int ID;
std::string sName;
};

Student s1;
Student s2(s1);

在不定義任何構(gòu)造函數(shù)的情況下,Student對(duì)象能定義成功,因?yàn)榫幾g器會(huì)默認(rèn)為我們?cè)O(shè)置幾個(gè)構(gòu)造函數(shù),多的不說了,就說最簡(jiǎn)單的兩個(gè)

Student() {}
Student(const Student& o):ID(o.ID),sName(o.sName)
{}

一個(gè)是在不提供任何參數(shù)的情況下的默認(rèn)構(gòu)造函數(shù),另一個(gè)是通過另一個(gè)對(duì)象構(gòu)造的拷貝構(gòu)造函數(shù)。

class Student
{int ID;
std::string sName;
public:
Student(const string& _sName):sName(_sName){}
};

Student s1;
Student s2(s1);

但是如果我們自己加了一個(gè)只指定名字參數(shù)的構(gòu)造函數(shù),上面這段代碼就編譯不過了。因?yàn)榫幾g器就不自動(dòng)為你生成默認(rèn)的那些構(gòu)造函數(shù)了,因?yàn)樗X得你想根據(jù)自己的需求定義構(gòu)造函數(shù)。但是,如果你除了自己自定義的構(gòu)造函數(shù),還想用編譯器為你生成默認(rèn)的,怎么辦?

class Student
{int ID;
std::string sName;
public:
Student() {}
Student(const Student& o) :ID(o.ID), sName(o.sName)
{}
Student(const string& _sName):sName(_sName){}
};

傳統(tǒng)的辦法就是受點(diǎn)累,把編譯器為你生成的那兩個(gè)你親自寫一遍,這樣不累嗎?尤其是student成員變量很多的時(shí)候。有了default關(guān)鍵以后,省事多了,

class Student
{int ID;
    std::string sName;
    public:
    Student() = default;
    Student(const Student& o) = default;
    Student(const string& _sName):sName(_sName){}
};

Student s1;
Student s2(s1);

那兩個(gè)默認(rèn)的構(gòu)造函數(shù),我們想要的實(shí)現(xiàn)跟編譯器默認(rèn)的一模一樣,直接指定個(gè)default就行了,不用全部手打出來。這就是default這個(gè)關(guān)鍵字的作用。

完整的例子如下所示:

class x2
{public:
    	x2() = default;	//inline(類內(nèi)) defaulted 默認(rèn)構(gòu)造函數(shù)
    	x2(const x2&);
    	x2& operator=(const x2&);
    	~x2() = default;	//inline(類內(nèi)) defaulted 析構(gòu)函數(shù)
};

x2::x2(const x2&) = default; // 類外 拷貝構(gòu)造函數(shù)
x2& x2::operator=(const x2&) =default;	//類外 拷貝賦值操作符
delete的用處

同樣的對(duì)于上面的例子中,如果你不想讓諸如:

Student s1;
Student s2(s1);

這樣的默認(rèn)構(gòu)造函數(shù)被調(diào)用,除了寫顯示的特殊函數(shù),讓編譯器為你排除掉,還可以通過=delete函數(shù)特性來為你禁用某些函數(shù)

例如:

class x5
{public:
    	// 禁用類的new操作符
    	void *operator new(size_t) = delete;
    	void *operator new[](size_t) = delete;
}

x5 *pa = new x5; // 錯(cuò)誤
x5 *pb = new x5[10]; // 錯(cuò)誤

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站題目:C++11——“=default“和“=delete“函數(shù)特性-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article44/dedoee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、軟件開發(fā)、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站網(wǎng)站維護(hù)、建站公司

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站建設(shè)
永兴县| 乐陵市| 永兴县| 蚌埠市| 句容市| 出国| 巩义市| 中西区| 盐亭县| 河东区| 舒城县| 安仁县| 临高县| 镇安县| 工布江达县| 武城县| 汝阳县| 德庆县| 襄垣县| 资讯 | 石渠县| 略阳县| 略阳县| 资源县| 聊城市| 屯门区| 绥江县| 汤阴县| 论坛| 东港市| 比如县| 镇江市| 鄢陵县| 依安县| 英德市| 景谷| 进贤县| 措美县| 桦甸市| 句容市| 泗洪县|